最終更新日 2024-09-25
「hmPy・IronPython」の例題⑥ Excelの操作
概要
IronPythonの例題のひとつとなります。
Excelの操作
.NETはExcelの操作にも向いているため、IronPythonでも非常にやりやすいと言えるでしょう
#PY = loaddll( hidemarudir + @"\hmPy.dll" ); $xls_filename = R"(C:\work\Sample.xlsx)"; #_ = dllfuncw(#PY, "DoFile", currentmacrodirectory + "\\excel1.py"); // 外部ファイルの実行 freedll( #PY );
外部の「.py」ファイルを用意
上記マクロと同じディレクトリに、excel1.pyというファイルを用意しましょう。
文字コードはやはりcp932(sjis)なので、気をつけてください。
又、あらかじめ、「C:\work\Sample.xlsx」というパスでExcelファイルを用意しておいてください。
# coding: cp932
import clr
clr.AddReferenceByPartialName("System.Runtime.InteropServices")
clr.AddReferenceByPartialName("System.Windows.Forms")
import System
from System import *
from System.Runtime.InteropServices import *
from System.Windows.Forms import *
filename = hm.Macro.Var["$xls_filename"]
excelApp = None
workBooks = None
workBook = None
workSheets = None
range = None
try:
# COM経由で開く。秀丸マクロもCOM機能はもってはいるが、取り扱いが大変になりすぎる傾向がある、IronPythonならお手軽である。
excelAppType = Type.GetTypeFromProgID('Excel.Application')
excelApp = Activator.CreateInstance(excelAppType)
excelApp.DisplayAlerts = False
workBooks = excelApp.WorkBooks
workBook = workBooks.Open(filename)
workSheets = workBook.Sheets
workSheet = workSheets[1]
range = workSheet.Cells
range[1, 1] = "テスト文字列"
workBook.Save()
workBook.Close()
except Exception as e:
System.Windows.Forms.MessageBox.Show(e.Message)
pass
else:
pass
finally:
# 順次解放
if range != None:
Marshal.ReleaseComObject(range)
if workSheet != None:
Marshal.ReleaseComObject(workSheet)
if workSheets != None:
Marshal.ReleaseComObject(workSheets)
if workBook != None:
Marshal.ReleaseComObject(workBook)
if workBooks != None:
Marshal.ReleaseComObject(workBooks)
if excelApp != None:
Marshal.ReleaseComObject(excelApp)
