Excel ファイルから値を抽出し、その概要を別の Excel ファイルに保存する古い Ruby プログラムがあります。そのために、プログラムは Ruby のライブラリー win32ole を使用します。Windows 7 64 ビット (Windows XP 32 ビットではなく)、Office 2003 ではなく Office 2007 を搭載した新しいコンピューターに切り替えた後、結果の Excel ファイルを保存するときにプログラムがエラーをスローするようになりました。
ana.rb:120:in `method_missing': SaveAs (WIN32OLERuntimeError)
OLE error code:800A03EC in Microsoft Office Excel
'c:/my/dir' could not be accessed. The file could be corrupt, is on a server that does not react, or the file is write protected.
(German: Auf 'c:/my/dir' konnte nicht zugegriffen werden. Unter Umstaenden ist die Datei beschaedigt, befindet sich auf einem Server, der nicht mehr reagiert, oder die Datei ist schreibgeschuzetzt.)
HRESULT error code:0x80020009
Ausnahmefehler aufgetreten.
from ana.rb:120:in `save'
from ana.rb:54:in `generateReport'
from ana.rb:13:in `ana'
from ana.rb:191
プログラムの関連部分は次のとおりです。
def generateReport
...
report.save(basicdir + reportfile)
...
end
レポートで:
class EasyExcel
def initialize(path)
@path = path
@excel = excel = WIN32OLE.new("excel.application")
@workbook = @excel.Application.Workbooks.Open(@path)
@cache = Array.new
end
def save(filename)
saveCache
@workbook.SaveAs(filename)
end
120行目はそれ@workbook.SaveAs(filename)
です。filename
その時の の値は ですc:/projekte/itcampus/feedback-analyse/feedback_report.xls
。デバッグを行った後、Ruby の例外処理が不適切なため、Ruby インタープリターの停止後に Excel がハングするインスタンスが 2 つあることに気付きました。したがって、問題は実際には、Windows 7 上の Excel での処理パスの変更によるものと思われます。
次の質問に対する答えを知っている人はいますか?
- 32 ビットではなく 64 ビットであるか、2003 ではなく Office 2007 を使用しているか、またはその両方でしょうか?
- Ruby から Windows 7 64 ビットや Word や Excel などのアプリケーションへのブリッジを使用するための回避策や修正方法はありますか?
- Ruby の Windows アプリケーションで使用できる API を見つけるにはどうすればよいですか?
私が試したRubyインタープリターは次のとおりです。
- ruby 1.8.7 (2011-02-18 パッチレベル 334) [i386-mingw32]
- ルビー 1.9.2p180 (2011-02-18) [i386-mingw32]