VSCodeにてC#で<PackageReference Include="Microsoft.Office.Interop.Excel" Version="15.0.4795.1001" />を使ってもExcelを操作できない

Nawa 40 評価のポイント
2024-07-24T04:48:12.36+00:00

VSCodeにてC#で<PackageReference Include="Microsoft.Office.Interop.Excel" Version="15.0.4795.1001" />を使ってもExcelを操作できないのでしょうか。

<COMReference Include="Microsoft.Office.Interop.Excel">を使う必要があるのでしょうか。

・環境

Windows11 Pro

Office365

.net SDK 8.0.303

VSCode

C#
C#
C 言語ファミリをルーツとし、コンポーネント指向プログラミングのサポートを含む、オブジェクト指向およびタイプセーフのプログラミング言語。
30 件の質問
0 件のコメント コメントはありません
{count} 件の投票

承認済みの回答
  1. gekka 9,256 評価のポイント MVP
    2024-07-25T03:45:51.8833333+00:00

    nugetにあるMicrosoft.Office.Interop.ExcelはMicrosoftではなく無関係の個人が勝手に登録したファイルです。
    # マイクロソフトによる署名があるファイルではあるが単独配布されてないバージョンなので、再配布許可してるか明示されてない

    ExcelのCOMであるMicrosoft Excel xx Object Libraryは、Microsoft Office xx Object Libraryに登録されている型を使用しているため依存しています。
    つまり、.Netから参照する場合にも両方の参照が必要です。

    しかしnugetにあるやつはMicrosoft Office xx Object LibraryのPIAが含まれていません。
    そのため参照解決に失敗しているのがそもそものエラーです。

    COMReferenceはCOMの登録情報をもとに依存しているCOMも連鎖的に解決してくれるため、ExcelのCOMReferenceのみでビルドも実行もできる状態になります。

    COMReferenceが嫌なら

    <Reference Include="Microsoft.Office.Interop.Excel">
        <HintPath>C:\Program Files (x86)\Microsoft Visual Studio\Shared\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Excel.dll</HintPath> <!-- VSTOビルドツールで入るかも -->
        <!-- <HintPath>$(Windir)\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll</HintPath> -->
        <EmbedInteropTypes>true</EmbedInteropTypes>
    </Reference>
    <Reference Include="office">
        <HintPath>C:\Program Files (x86)\Microsoft Visual Studio\Shared\Visual Studio Tools for Office\PIA\Office15\Office.dll</HintPath> <!-- VSTOビルドツールで入るかも -->
        <!-- <HintPath>$(Windir)\assembly\GAC_MSIL\office\15.0.0.0__71e9bce111e9429c\OFFICE.DLL</HintPath> -->
        <EmbedInteropTypes>true</EmbedInteropTypes>
    </Reference>
    

    のように自力で依存も参照してやれば.net frameworkのmsbuildを使わなくてもdotnet buildでビルド可能になります。

    1 人がこの回答が役に立ったと思いました。

1 件の追加の回答

並べ替え方法: 最も役に立つ
  1. SurferOnWww 2,816 評価のポイント
    2024-07-24T05:10:19.71+00:00

    前のスレッド「C#でEXCELを使おうとするとUnhandled exception. System.IO.FileNotFoundExceptionのエラーが発生」のあなたのコメントに、<PackageReference Include="Microsoft.Office.Interop.Excel" Version="15.0.4795.1001" /> はコメントアウトして、<COMReference Include="Microsoft.Office.Interop.Excel"> ... </COMReference> だけにしたプロジェクトファイルが載ってましたが、それで問題なく動いたのではなかったのですか?

    両方あると、dll がダブっているというエラーでビルドできないはずです。といって、<PackageReference Include="Microsoft.Office.Interop.Excel" Version="15.0.4795.1001" /> だけではダメなのは、前のスレッドの通りでは?

    なので、あなたがやったように、<COMReference Include="Microsoft.Office.Interop.Excel"> ... </COMReference> だけをプロジェクトファイルに含めるのが正解だと思います。

    それで何か問題があるなら、それを具体的に書いてください。


お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。