先日書いた今年中に8つの項目のエントリーの、VBscript vs Pythonの項目について、いくつか情報を頂きました。
以前からお世話になっているgaruさんからは、PYTHONでExcelを読み込む方法。モチオさんからは、JscriptでExcelを読み書きする方法についてです。折角いただいた情報なので、3つのスクリプトでどうやるのか、方法をまとめてみようと思います。
環境
ソフト | バージョン | 備考 |
---|---|---|
Autodesk Softimage | ver 2010 | |
PYTHON | 2.6.2(32bit) | http://www.python.jp/Zope/download/pythoncore |
Python for Windows Extensions | 2.6 | http://sourceforge.net/projects/pywin32/ |
VBscript
ではまず、VBscriptからいきます。今回は、Dドライブに置いてある"test.xls"に対して処理を行うという過程で、各種スクリプトを書いています。
あと、スクリプトのサンプルの中で、青字で塗りつぶしている所は読み書き両方で共通した部分になります。(初めて、ブログでスクリプトの事書くんですが、こんなまとめ方で良いんですかね、ドキドキ…。)
VBscriptでのExcelファイルの読み込み
' Excelファイルのパス
xlPath = "D:\test.xls"
' Excelのインスタンス作成
Set xlApp = CreateObject("Excel.Application")
' マクロの警告やメッセージを表示しないように設定
xlApp.DisplayAlerts = False
' 指定したExcelファイルを開く
Set xlWorkBook = xlApp.Workbooks.open(strxlPath)
' 任意のワークシートを取得(id か シート名で指定)
Set xlSheet = xlWorkBook.Worksheets(1)
' 任意のセルを取得
v0 = xlSheet.Cells(1, 2)
v1 = xlSheet.Cells(2, 2)
logmessage(v0)
logmessage(v1)
' 終了処理
xlApp.Quit
Set xlWorkBook = Nothing
Set xlApp = Nothing
VBscriptでのExcelファイルの書き込み
' Excelファイルのパス
xlPath = "D:\test.xls"
' Excelのインスタンス作成
Set xlApp = CreateObject("Excel.Application")
' マクロの警告やメッセージを表示しないように設定
xlApp.DisplayAlerts = False
' 指定したExcelファイルを開く
Set xlWorkBook = xlApp.Workbooks.open(strxlPath)
' 任意のワークシートを取得(id か シート名で指定)
Set xlSheet = xlWorkBook.Worksheets(1)
' セルに値を代入します
v0 = "VBで登録1"
v1 = "VBで登録2"
xlSheet.Cells(5, 10).Value = v0
xlSheet.Cells(5, 11).Value = v1
' ファイルの保存
xlSheet.saveas strxlPath
' 終了処理
xlApp.Quit
Set xlWorkBook = Nothing
Set xlApp = Nothing
Jscript
次にJscript。たぶん、SoftimageでJscriptを書いたの初めてじゃないかな?と言うくらい、経験がありません…。一応動作確認してますが、間違いなどあれば、ご指摘くださいー。
JscriptでのExcelファイルの読み込み
// Excelファイルのパス
var xlPath = "D:\test.xls"
// Excelのインスタンス作成
var xlApp = new ActiveXObject("Excel.Application");
// マクロの警告やメッセージを表示しないように設定
xlApp.DisplayAlerts = False;
// Excelファイルを開く
var xlWorkBook = xlApp.Workbooks.Open(xlPath);
// 任意のワークシートを取得(id か シート名で指定)
var xlSheet = xlWorkBook.WorkSheets(1);
// 任意のセルを取得
var v0 = xlSheet.Cells(1, 2);
var v1 = xlSheet.Cells(2, 2);
logmessage(v0)
logmessage(v1)
// 終了処理
xlApp.quit();
xlWorkBook = null;
xlApp = null;
JscriptでのExcelファイルの書き込み
// Excelファイルのパス
var xlPath = "D:\test.xls"
// Excelのインスタンス作成
var xlApp = new ActiveXObject("Excel.Application");
// マクロの警告やメッセージを表示しないように設定
xlApp.DisplayAlerts = False;
// Excelファイルを開く
var xlWorkBook = xlApp.Workbooks.Open(xlPath);
// 任意のワークシートを取得(id か シート名で指定)
var xlSheet = xlWorkBook.WorkSheets(1);
// アクティブなワークシートのセルA1に文字を書く
var v0 = "JSで登録1";
var v1 = "JSで登録2";
xlSheet.Cells(6, 10).Value = v0;
xlSheet.Cells(6, 11).Value = v1;
// カレントディレクトリのtest.xlsに保存
xlWorkBook.Saveas(xlPath);
// 終了処理
xlApp.quit();
xlWorkBook = null;
xlApp = null;
Python
garuさんの記事ではモジュールをインストールされていたようですが、こちらではデフォルトでインストールするpywin32を使用して、COM経由で読み書きする方法を紹介します。
PythonでのExcelファイルの読み込み
app=Application
import win32com.client
# Excelファイルのパス
xlPath = "D:\test.xls"
# Excelのインスタンス作成
xlApp = win32com.client.Dispatch("Excel.Application")
# メッセージを表示しないように設定
xlApp.DisplayAlerts = False
# ファイルを開く
xlWorkBook = xlApp.Workbooks.Open(xlPath)
# 任意のワークシートを取得(id か シート名で指定)
xlSheet = xlWorkBook.Sheets(1)
# セルから値を読取り
v0 = xlSheet.Cells(1, 2)
v1 = xlSheet.Cells(2, 2)
app.logmessage(v0)
app.logmessage(v1)
# 終了処理
xlApp.Quit()
xlWorkBook = None
xlApp = None
PythonでのExcelファイルの書き込み
app=Application
import win32com.client
# Excelファイルのパス
xlPath = "D:\test.xls"
# open excel file
xlApp = win32com.client.Dispatch("Excel.Application")
# メッセージを表示しないように設定
xlApp.DisplayAlerts = False
# ファイルを開く
xlWorkBook = xlApp.Workbooks.Open(xlPath)
# 任意のワークシートを取得(id か シート名で指定)
xlSheet = xlWorkBook.Sheets(1)
# セルに値を代入します
v0 = u"PYで登録1"
v1 = u"PYで登録2"
xlSheet.Cells(7, 10).Value = v0
xlSheet.Cells(7, 11).Value = v1
# ファイルの保存(saveasだと上手くいかないので"save"で)
xlWorkBook.Save()
# 終了処理
xlApp.Quit()
xlWorkBook = None
xlApp = None
まとめ
自分の中ではSoftimageからExcelにアクセルするなら、VBscriptが一番シックリ来てて、簡単だ!と思ってたのですが、まとめてみると、そんなに変わらないですね…。ただの食わず嫌いでした(汗)
あと、今回思ったのですが、ブログでスクリプトの事書くのは正確性を求められるので敷居が高いなぁと思ってたのですが、フォローしてくれる方がいそうなので、ちょっと暴走してもツッコんでいただけそうですね。
いや、とてもありがたい。