将 Office Interop 与 Excel 和 .NET 4.0/4.5 配合使用时出现问题

本文关键字:问题 Interop Office Excel NET | 更新日期: 2023-09-27 18:32:44

当我面向 .NET 3.5 时,我有以下代码可以正常工作:

Microsoft.Office.Interop.Excel.Application _excelInstance;
Microsoft.Office.Interop.Excel.Worksheet _excelWorksheet;
Microsoft.Office.Interop.Excel.Workbook _excelWorkbook;
_excelInstance = new Microsoft.Office.Interop.Excel.Application();
_excelWorkbook = _excelInstance.Workbooks.Add();
_excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)_excelWorkbook.Worksheets.get_Item(1);

但是,当我以 .NET 4.5 为目标时,编译器在上面的最后一行给出以下错误:

找不到编译动态表达式所需的一个或多个类型。您是否缺少参考?

我无法针对此项目的 .NET 3.5,它必须是 4.0 或 4.5。

知道是什么原因导致这种情况,或者我应该如何解决这个问题吗?

谢谢。

编辑-

这是 entier 类:

public class ExcelWriter : IDisposable
{
    private string _outputFile;
    public ExcelWriter(string outputFile)
    {
        _outputFile = outputFile;
    }
    public void Write(List<string[]> data)
    {
        Microsoft.Office.Interop.Excel.Application _excelInstance;
        Microsoft.Office.Interop.Excel.Worksheet _excelWorksheet;
        Microsoft.Office.Interop.Excel.Workbook _excelWorkbook;
        _excelInstance = new Microsoft.Office.Interop.Excel.Application();
        _excelWorkbook = _excelInstance.Workbooks.Add();
        _excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)_excelWorkbook.Worksheets.get_Item(1);
        int rowNumber = 1;
        foreach (var row in data)
        {
            int columnNumber = 1;
            foreach (var field in row)
            {
                _excelWorksheet.Cells[rowNumber, columnNumber] = field;
                columnNumber++;
            }
            rowNumber++;
        }
        if (File.Exists(_outputFile))
        {
            File.Delete(_outputFile);
        }
        _excelWorkbook.SaveAs(_outputFile);
        _excelWorkbook.Close();
        _excelInstance.Quit();
    }
    public void Dispose()
    {
        if (File.Exists(_outputFile))
        {
            File.Delete(_outputFile);
        }
    }
}

将 Office Interop 与 Excel 和 .NET 4.0/4.5 配合使用时出现问题

是的,当您面向 .NET 4.0 及更高版本时,当您添加对 Microsoft.Office.Interop.Excel 互操作程序集的引用时,Excel 类型库的转换方式将有所不同。 它将利用添加的动态关键字。 在 Office 互操作中对此有很多用法,它是一个在许多地方返回"变体"的对象模型。 以前它们被转换为对象,现在被转换为动态

这需要一个不属于项目的框架程序集。 可能是因为您从以前的 VS 版本转换了它。

右键单击项目的"引用"节点,选择"添加引用",然后选择"Microsoft.CSharp"。