2

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]
4

3 に答える 3

3

私の質問にアイデアやコメントを追加してくれたすべての人に感謝します。最後に、回避策を見つけました。

class EasyExcel
  ....
  def save(filename)
    saveCache
    dos_file = filename.gsub(/\//, "\\\\")
    @workbook.SaveAs(filename)
  end

これにより、(ルビ) パス内のすべてのスラッシュが 2 つのバック スラッシュに置き換えられ、最後に 1 つのバック スラッシュに評価されます。

だから、でExcelを開く

@workbook = @excel.Application.Workbooks.Open(@path)

(の@pathようなもので

C:/projekte/itcampus/feedback-analyse/feedback/Bewertungsbogen_XX1404.xls

) 動作しますが、

@workbook.SaveAs("c:/projekte/itcampus/feedback-analyse/feedback_report.xls")

ではない。非常に奇妙な!

于 2011-09-20T06:54:52.570 に答える
1

Windows Server 2008 (64 ビット) で同様の問題が発生しましたが、解決策filename.gsub(/\//, "\\\\")expand_path役に立ちませんでした。

ユーザーと一緒に呼び出したところ、バックグラウンド プロセスの同じプログラムで OLE エラーが発生しました。

解決策 (冗談ではありませんが、うまくいきました): Create a folder C:\Windows\SysWOW64\config\systemprofile\Desktop

https://blogs.msdn.microsoft.com/dataaccesstechnologies/2012/12/19/error-microsoft-office-excel-cannot-access-the-file-while-accessing-microsoft-office-11で解決策を見つけました-0-object-library-from-ssis/ :

Windows 2008 Server x64 の場合: 次のディレクトリを作成します。

C:\Windows\SysWOW64\config\systemprofile\Desktop

Windows 2008 Server x86 の場合: 次のディレクトリを作成します。

C:\Windows\System32\config\systemprofile\Desktop

それでおしまい!!出来上がり!あなたはすべて行く準備ができています…..

同様の詳細を持つ別のリンク: https://social.msdn.microsoft.com/Forums/en-US/b81a3c4e-62db-488b-af06-44421818ef91/excel-2007-automation-on-top-of-a-windows- server-2008-x64?forum=innovateonoffice

于 2016-08-19T09:42:15.127 に答える
0

COM を使用して Windows 7 に切り替えるときに発生する可能性のある多くの問題は、ユーザー権限に関連しています。管理者権限でプログラムを実行しようとしましたか?

于 2011-09-20T06:02:14.957 に答える