From: Motomichi Matsuzaki Date: 2013-03-05T20:23:56+09:00 Subject: [ruby-list:49251] cygwin+ruby+win32oleでExcelファイルを開けない 松崎といいます。 数年来、不思議に思っていることがありまして、 rubyそのものの問題ではないと思いますが、 ほかに再現する環境を知らないためこちらでお尋ねします。 やろうとしていることは、win32oleを使ったExcelファイルの加工なのですが、 コマンドプロンプト(cmd.exe)から実行した場合はうまくいくのに、 cygwinのシェル(zsh.exe)から実行した場合はうまくいきません。 # したがって、対症療法は確立しております モデルとしてごくシンプルなスクリプト(メール末尾の excel_open.rb)で 空っぽの Book1.xlsx と旧形式である Book1.xls を開くことを例にします。 Windows 7でcygwinのターミナルとしてminttyをつかっており、 そこから旧形式を開こうとするとエラーで止まります。 しかしコマンドプロンプト(cmd.exe)からならば問題ないという差が出ます。 % uname -a CYGWIN_NT-6.1-WOW64 MINI 1.7.17(0.262/5/3) 2012-10-19 14:39 i686 Cygwin % ruby --version ruby 1.9.3p385 (2013-02-06 revision 39114) [i386-cygwin] % ruby excel_open.rb Book1.xlsx success % ruby excel_open.rb Book1.xls excel_open.rb:10:in `method_missing': (in OLE method `open': ) (WIN32OLERuntimeError) OLE error code:800A03EC in Microsoft Excel 'Book1.xls' にアクセスできません。読み取り専用または暗号化されてい ます。 HRESULT error code:0x80020009 Exception occurred. from excel_open.rb:10:in `
' % cmd Microsoft Windows [Version 6.1.7601] Copyright (c) 2009 Microsoft Corporation. All rights reserved. >ruby --version ruby --version ruby 1.9.3p385 (2013-02-06 revision 39114) [i386-cygwin] >ruby excel_open.rb Book1.xlsx ruby excel_open.rb Book1.xlsx success >ruby excel_open.rb Book1.xls ruby excel_open.rb Book1.xls success 非常に不思議なのは、cygwin上のzshから cmd.exe を呼び出して、 そこから実行するだけで開けるようになるという点です。 思いついたのは、cygwinのせいで環境変数が変わるせい、という点なのですが、 OLE呼び出しで環境変数の影響ってあるんでしたっけ? なにか、分かることがありましたら、教えて頂けないでしょうか。 := excel_open.rb =: #!/usr/bin/ruby # -*- coding: cp932 -*- require 'win32ole' infilename = ARGV.shift fso = WIN32OLE.new('Scripting.FileSystemObject') appl = WIN32OLE.new('Excel.Application') book = appl.Workbooks.open fso.getAbsolutePathName(infilename) if book puts 'success' book.Close(false) else puts 'failed' end appl.Quit := end of excel_open.rb =: -- Motomichi Matsuzaki, PhD Dept. of Biomedical Chemistry, Grad. Sch. of Medicine, Univ. of Tokyo, Japan