c# - 无法在 Visual Studio 2015 中创建 Excel 2016 的实例

标签 c#

我有 Visual Studio 2015,我的应用程序适用于 .NET Framework 4.0。

我安装了 Microsoft Office Home&Buissness 2016 并尝试使用以下代码创建一个实例: Microsoft.Office.Interop.Excel.Application excelAppTemplate = new Microsoft.Office.Interop.Excel.Application();

但是我得到这个错误:

Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Excel.Application'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{000208D5-0000-0000-C000-000000000046}' failed due to the following error: Interface not registered (Exception from HRESULT: 0x80040155).

我引用的是 Microsoft.Office.Interop.Excel 15.0.0.0。 在搜索答案时,我看到了删除此注册表项的解决方案:

HKEY_CLASSES_ROOT\TypeLib{00020813-0000-0000-C000-000000000046}

但是我有 1.9 而不是像 1.8 或 1.7 这样的以前的版本,只有 1.9。 Office 2016 有新版本吗?

最佳答案

我建议您使用更灵活、可配置和稳定的库,而不是 Microsoft.Office.Interop.Excel.Application 库 EPPlus .它比基于反射的 COM hell-library 快很多倍,并且可以通过 nuget 安装。

不得不提的是,EPPlus 仅支持 xlsx 文件格式,如果您需要使用旧的 xls 文件格式,您可以使用库 CSharpJExcel , 无需 COM 即可读取您的 xls 文件,然后通过 EPPlus 将它们保存为 xlsx。

这种从 xls 到 xlsx 的转换看起来像:

// Reading xls-file data with CSharpJExcel

var cellsData = new List<List<string>>();

var book = Workbook.getWorkbook(new FileInfo(fileName));
var dataSheet = book.getSheet(0);

// Loop over rows and fill collection with data
for (int r = 0; r < dataSheet.getRows(); r++)
{
    var dataRow = new List<string>();

    // Loop over columns  
    for (int c = 0; c < dataSheet.getColumns(); c++)
    {
        var cellValue = dataSheet.getCell(c, r).getContents();
        dataRow.Add(cellValue);
    }

    cellsData.Add(dataRow);
}


// Saving data to xlsx file with EPPlus
using (var xls = new ExcelPackage(new FileInfo(path + ".xlsx")))
{
    var sheet = xls.Workbook.Worksheets.Add("test");

    int row = 1;
    foreach (var cellsRow in cellsData)
    {
        int col = 1;

        // Some data processing logic...

        foreach (var cellData in cellsRow)
        {
            sheet.Cells[row, col].Value = cellData;

            ++col;
        }
        ++row;
    }

    xls.Save();
}

关于c# - 无法在 Visual Studio 2015 中创建 Excel 2016 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36282167/

相关文章:

c# - ASP.NET 数据库搜索

c# - 如何将数据绑定(bind)到 xamarin Android 中的 ListView ?

c# - 服务器标签格式不正确?

c# - 内联 block 似乎不起作用

c# - 在单元测试类中使用依赖注入(inject)

c# - Selenium Chrome 驱动程序显式等待不起作用

javascript - 如何使用 ServerOperation 获取 Kendo Grid 项目的页面

c# - 使用 MSBuild 发布 VSTO 加载项会出现错误 : The "SignFile" task failed unexpectedly. System.ArgumentNullException:值不能为空

c# - C#中如何检测Property值(ReferenceType属性)是否改变?

c# - 在 C#.NET 中捕获所有未处理的异常的简单方法