SoftimageからExcelファイルを読み書きする方法 (VB・J・PYTHON)

先日書いた今年中に8つの項目のエントリーの、VBscript vs Pythonの項目について、いくつか情報を頂きました。

以前からお世話になっているgaruさんからは、PYTHONExcelを読み込む方法。モチオさんからは、JscriptExcelを読み書きする方法についてです。折角いただいた情報なので、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が一番シックリ来てて、簡単だ!と思ってたのですが、まとめてみると、そんなに変わらないですね…。ただの食わず嫌いでした(汗)

あと、今回思ったのですが、ブログでスクリプトの事書くのは正確性を求められるので敷居が高いなぁと思ってたのですが、フォローしてくれる方がいそうなので、ちょっと暴走してもツッコんでいただけそうですね。
  
いや、とてもありがたい。

参考資料