3

MicrosoftExcelにデータをインポートするアプリケーションを開発しました。

VS2005 + .NET 2.0を使用していて、Microsoft Office 2007が私のマシン(Office 12)にインストールされています。

コンパイルされたアプリケーションは、自分のマシンで実行すると正常に動作しますが、アプリケーションを他のマシンに展開すると、下位バージョン(Office 2000)を使用していると言うと、次のエラーが発生します。

ファイルまたはアセンブリを読み込めませんでしたMicrosoft.Office.Interop.Excel、バージョン12.0.0.0

次に、マシンにインストールされているOffice(Excel)に関係なく、アプリケーションを正しく実行できるようにするにはどうすればよいですか?

ありがとう。

いくつかの更新:参照されている2つのDLL、つまりMicrosoft.Office.Interop.Excel.dll(バージョン12.0.0.0)とOffice.dll(バージョン12.0.0.0)をbinフォルダーに配置しました。この参照のプロパティをCopyLocal= Trueに設定しました。アプリケーションをコンパイルすると、DLLがdebug/releaseフォルダーにコピーされます。

ここで、アプリケーションを実行しようとすると、「ファイルまたはアセンブリを読み込めませんでしたMicrosoft.Office.Interop.Excel、バージョン12.0.0.0」というエラーが発生しました。

しかし、別のエラーが発生しました。System.AccessViolationException:保護されたメモリの読み取りまたは書き込みを試みました。これは多くの場合、他のメモリが破損していることを示しています。Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs(Object Filename、Object FileFormat、Object Password、Object WriteResPassword、Object ReadOnlyRecommended、Object CreateBackup、XlSaveAsAccessMode AccessMode、Object ConflictResolution、Object AddToMru、Object TextCodepage、Object TextVisualLayout、Object Local)

では、インストールされているOfficeのバージョンに関係なく、データテーブルデータをExcelにエクスポートできるアプリケーションを実際に作成するにはどうすればよいですか?

ありがとう。

4

4 に答える 4

2

MS Office Wrapper for .NETを見てください-Officeのバージョンに依存しないラッパーです(testeod MS Office 97-2007で動作します)。

于 2009-08-07T07:25:29.717 に答える
1

過去に、Officeのすべての参照(つまり、システムのものではない)がローカルにコピーするように設定されていることを確認すると、機能することがわかりました。

私は通常、Office 2003 PIA(MicrosoftのWebサイトから入手できます)を使用してコンパイルし、出力はOffice 07で機能します。長い間Office2000またはXPを試したことがないため、出力が機能するかどうかはわかりません。

于 2009-08-07T13:32:03.453 に答える
0

Excel2007ではなくExcel2003に対してビルドすると、問題は少なくなりますが、それでも問題が発生する可能性があります。

SpreadsheetGear for .NETは、.NET用のExcel互換ライブラリであり、ユーザーが特定のバージョンのExcelを使用しているかどうかを気にせずに、アプリケーションとともに展開できます(Excelのバージョンがない場合でも機能します)。

ここでC#およびVBソースコードのサンプルを確認し、ここから無料試用版をダウンロードできます

免責事項:私はSpreadsheetGearLLCを所有しています

于 2009-08-07T04:35:57.983 に答える
0

これは、そのアセンブリのバージョン12を特に探しているためです。

csprojで、Referencesフォルダーでそのアセンブリへの参照を見つけます。その参照の[プロパティ]に移動し、[特定のバージョン]を[False]に変更します。

于 2009-08-07T01:02:47.923 に答える