8

MS Visual Web Developer 2008 Express Ed で開発中に問題が発生しました。Windows7 64 ビット OS で ASP.NET C# を開発しています。

Excel ドキュメントを開こうとしていますが、Old format or invalid type library. (Exception from HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

ビルドをすべてのプロセッサ (任意の CPU、x64、x86) に構成しましたが、機能しません。インターネットで答えを検索しましたが、それを処理する方法がわかりませんでした。

奇妙なことに、私が Microsoft Visual C# 2010 Express で開発したとき、同じシステムで同じコードが機能していました。どうして?背後で動作しているのと同じdllではありませんか?

x64 システムで動作するように、その COM dll を変更する必要がありますか?

どうすればいいですか?

私のコードは次のとおりです。

using Excel = Microsoft.Office.Interop.Excel;
xlApp = new Excel.Application();
__Log("Openning " + excelFileName);
xlWorkBook = xlApp.Workbooks.Open(excelFileName, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(2);
4

1 に答える 1

20

インターネットを掘り下げた後、COMオブジェクトを使用したMicrosoft Interopにバグがあることがわかりました(少なくとも私の場合はMS Excel 2010です)。

バグは、スレッド (C# または VB コード) のローカライズが、以前にインストールした MS Excel のローカライズに適しているかどうかを .NET がチェックし、そうでない場合、Microsoft.Office.Interopライブラリが古いか無効であると通知することです。

スレッドのローカライゼーションは、コンピューターの地域設定 (コントロール パネル --> 地域と言語) から取得されます。

次に、この問題を解決するための 2 つのオプションがあります。

  1. スレッドのローカリゼーションを (コードで) 変更するには
  2. Office の言語パックをインストールする

最初の解決策は次のようになります。

using System.Threading;     // For setting the Localization of the thread to fit
using System.Globalization; // the of the MS Excel localization, because of the MS bug

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
excelFileName = System.IO.Path.Combine(excelPath, "Ziperty Buy Model for Web 11_11_2011.xlsm");

それが役立つことを願っています:) gr8日

于 2011-11-25T22:49:10.493 に答える