无法加载文件或程序集“Office,版本=15.0.0.0”

问题描述 投票:0回答:6

我用的是Vs2013。我创建了应用程序,在其中使用 Excel 文件作为输入并从文件中获取联系人。 我的电脑一切正常。我有Vs2013。 Windows 8.1、Ms Office 2007 和 2013。
当我在任何其他计算机上运行我的应用程序时,它会抛出

无法加载文件或程序集“office,Version=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bc111e9429c”或其依赖项之一。系统找不到指定的文件

根据我的申请要求,我需要使用Office 2007到2013的Excel文件。

我引用了一些 StackOverflow 链接,但没有得到结果。我被困住了。请建议我如何解决这个问题。

c# .net import-from-excel
6个回答
37
投票

即使我有 Office 2010 并且 GAC 下没有

Microsoft.Office.Interop.Excel
文件夹,我也会收到此错误消息。
我在这里找到了适合我的案例的解决方案: https://www.add-in-express.com/forum/read.php?FID=5&TID=15525
您必须引用这些文件夹中的两个 dll 文件:
C:\Windows\assembly\GAC_MSIL\Microsoft.Vbe.Interop\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll


C:\Windows\assembly\GAC_MSIL\office\15.0.0.0__71e9bce111e9429c\OFFICE.DLL


23
投票

您的另一台机器需要安装相应版本的Office。 15.0.0.0 应对应于 Office 2013 - 需要安装在您的目标计算机上(其他版本的 Office 可能无法工作)。这几乎肯定意味着您正在使用 MSOffice 互操作库,该库仅在安装了 Office 且针对同一版本时才有效。

或者,您可以重构代码以直接读取 Excel XML。


15
投票

使用 COMRreference 属性。例如,这里是 Excel 的 COMReference:

<ItemGroup>
    <COMReference Include="Microsoft.Office.Interop.Excel">
        <EmbedInteropTypes>true</EmbedInteropTypes>
        <Guid>00020813-0000-0000-c000-000000000046</Guid>
        <Isolated>false</Isolated>
        <Lcid>0</Lcid>
        <WrapperTool>primary</WrapperTool>
        <VersionMajor>1</VersionMajor>
        <VersionMinor>9</VersionMinor>
    </COMReference>
</ItemGroup>

对本次讨论中的确切子属性有一点帮助:使用 Office 互操作时的 COMReference 条目不正确 #5735


9
投票

我通过更改 Excel.dll 版本得到了解决方案。我之前使用的是 15.0.0.0,现在我将其更改为 12.0.0.0 并且工作正常。 我从

Add reference > Browse > C: > Windows > assembly > GAC > Microsoft.Office.Interop.Excel > 12.0.0.0_etc > Microsoft.Office.Interop.Excel.dll

得到了dll

4
投票

我创建了一个批处理文件来解决此问题。请参阅下面的脚本:

    echo off
        cls
        color 1f
        echo Checking for Administrator elevation.
        openfiles>nul 2>&1

            if %errorlevel% EQU 0 goto isadmin

                COLOR 4f
            echo.    You are not running as Administrator.
            echo.    This tool cannot do it's job without elevation.
            echo.
            echo.    You need run this tool as Administrator.
            echo.

            echo.Press any key to continue . . .
            pause>nul
        exit
        :isadmin
        if exist c:\windows\assembly\GAC_MSIL\office\16.0.0.0__71e9bce111e9429c\OFFICE.DLL set officever=16
    if exist c:\windows\assembly\GAC_MSIL\office\15.0.0.0__71e9bce111e9429c\OFFICE.DLL set officever=15
    if exist c:\windows\assembly\GAC_MSIL\office\14.0.0.0__71e9bce111e9429c\OFFICE.DLL set officever=14

    md c:\windows\assembly\GAC_MSIL\office\12.0.0.0__71e9bce111e9429c
    xcopy c:\windows\assembly\GAC_MSIL\office\%officever%.0.0.0__71e9bce111e9429c c:\windows\assembly\GAC_MSIL\office\12.0.0.0__71e9bce111e9429c /s/y
pause

1
投票

我遇到了同样的问题,您应该包含以下包(Syncfusion.XlsIO)而不是(Microsoft.Office.interop.Excel),因为它仅支持 Excel 2013,但第一个“Syncfusion.XlsIO”确实支持 Excel 2016;

=> using Syncfusion.XlsIO;

以下代码:

  using (ExcelEngine excelEngine = new ExcelEngine())
                {
                        IApplication application = excelEngine.Excel;
                        application.DefaultVersion = ExcelVersion.Excel2016;
                        IWorkbook workbook = application.Workbooks.Create(1);
                        IWorksheet worksheet = workbook.Worksheets[0];
                        //Adding text to a cell
                        for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
                        {
                           worksheet.Range[1, i].Text = dataGridView1.Columns[i - 1].HeaderText;
                        }

                        for (int i = 0; i < dataGridView1.Rows.Count-1; i++)
                        {
                            for (int j = 0; j < dataGridView1.Columns.Count; j++)
                            {
                                worksheet.Range[i + 2, j + 1].Text = dataGridView1.Rows[i].Cells[j].Value.ToString();
                            }
                        }
                        //Saving the workbook to disk in XLSX format
                        Stream excelstream = File.Create(Path.GetFullPath(@"MyExcelFile.xlsx"));
                        workbook.SaveAs(excelstream);
                        excelstream.Dispose();
                }
© www.soinside.com 2019 - 2024. All rights reserved.