我有 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/