我有一个C#应用程序,其目的是存储大量数据。我正在使用Microsoft.Office.Interop.Excel(Microsoft.Office.Interop.Excel.dll版本14.0.0.0)来帮助我完成此任务。我安装了Excel 2007。
我使用以下几行:
excelApp = new Microsoft.Office.Interop.Excel.Application();
excelWorkBook = excelApp.Workbooks.Add(misValue);//*--------> LINE NOT WORKING */
excelWorksheetBeingWritten = (Excel.Worksheet)excelWorkBook.Worksheets.get_Item(1);
我的代码然后迭代一个大的对象列表,每次必须写一行时,我会做类似的事情:
var startCell = excelWorksheetBeingWritten.Cells[excelLineCounter, 1];
var endCell = excelWorksheetBeingWritten.Cells[excelLineCounter, 2];
string[] tmpArray = new string[2] { stringVar1, stringVar2 };
tmpRange = excelWorksheetBeingWritten.Range[startCell, endCell];
tmpRange.Value = tmpArray;
当excelLineCounter超过65536时,抛出“HRESULT:0x800A03EC异常”。我完全了解(in)着名的Excel2007前行限制(正好是65536)。我不明白的是,当Excel 2007(我的版本)的文件限制为1.048.576行时,互操作使用该限制的原因。
另一方面,如果我用以下内容替换上面的“LINE NOT WORKING”,它似乎使用Excel 2007行限制,异常消失:
excelWorkBook = excelApp.Workbooks.Open(@"H:\Workbook1.xlsx");//*--------> LINE WORKING */
注意:“Workbook1.xlsx”是以前保存为“Excel Workbook(* .xlsx)”的空白工作簿
有人可以告诉我,为了配置Excel Interop对象默认使用Excel 2007限制,我需要做什么样的魔法,最好不要先放置以前保存的空.xlsx文件?
答案 0 :(得分:0)
昨天我遇到了类似的问题,解决方案是默认更改Excel设置以创建xlsx文件。
在Excel中:文件 - >选项 - >保存 - >以这种格式保存文件
您的默认值可能是“Excel 97-2003(* .xls)”,就像我的那样。如果将其更改为“Excel工作簿(* .xlsx)”,则代码将起作用。