.net 未能加载文件或程序集'Office,版本=15.0.0.0'

4si2a6ki  于 2023-01-14  发布在  .NET
关注(0)|答案(6)|浏览(635)

我使用Vs2013。我已经创建了应用程序,其中我使用Excel文件作为输入,并从文件中获得联系人。一切都在我的电脑上工作。我有Vs2013。Windows 8.1,女士Office 2007 & 2013。
当我在任何其他计算机上运行应用程序时,它会抛出
未能加载文件或程序集“Office,版本=15.0.0.0,区域性=neutral,PublicKeyToken=71e9bc111e9429c”或它的某一个依赖项。系统找不到指定的文件
根据我的应用程序要求,我需要使用Excel文件从Office 2007到2013。
我已经提到了一些堆栈溢出链接,但我没有得到结果。我卡住了。请建议我如何解决这个问题。

eni9jsuy

eni9jsuy1#

您的另一台计算机需要安装相应版本的Office。15.0.0.0应对应于Office 2013 -需要在您的目标计算机上安装Office 2013(其他版本的Office可能无法正常工作)。这几乎可以肯定地意味着您正在使用MSOffice互操作库,该互操作库仅在安装了Office且针对相同版本时才能正常工作。
或者,您可以重构代码以直接读取Excel XML。

cfh9epnr

cfh9epnr2#

我也得到了这个错误消息,即使我有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

jgwigjjp

jgwigjjp3#

我通过更改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

hsvhsicv

hsvhsicv4#

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

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
zqry0prt

zqry0prt5#

我有同样的问题,你应该包括以下软件包(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();
                }
hpcdzsge

hpcdzsge6#

我的问题是,我试图使用nuget包:

<PackageReference Include="Microsoft.Office.Interop.Excel" Version="15.0.4795.1001" />

它不仅不受支持,而且无法用FileNotFoundException加载。
使用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>

下面的讨论对准确的子属性有一些帮助:Incorrect COMReference entry when using Office interop #5735

相关问题