2017-01-26 4 views
0

У меня есть приложение C#, целью которого является хранение большого количества данных. Я использую Microsoft.Office.Interop.Excel (Microsoft.Office.Interop.Excel.dll Version 14.0.0.0), чтобы помочь мне в этом. У меня установлен Excel 2007.C# Excel Interop ограничение строки -> HRESULT: исключение 0x800A03EC

Я использую следующие строки:

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». Я прекрасно понимаю (в) знаменитый предиск Excel2007 ряд строк (это точно 65536). Я не понимаю, почему interops используют этот предел, когда Excel 2007 (моя версия) имеет документированный предел в 1.048.576 строк.

С другой стороны, если я заменю выше «LINE не работает» в дальнейшем, он, кажется, использует ограничение строки Excel 2007 и исключение исчезает:

excelWorkBook = excelApp.Workbooks.Open(@"H:\Workbook1.xlsx");//*--------> LINE WORKING */

Примечание: " Workbook1.xlsx "является пустой книгой, ранее сохраненной как" Книга Excel (* .xlsx) "

Может кто-нибудь, пожалуйста, скажите, какое колдовство мне нужно сделать, чтобы настроить объекты Excel Interop на использование Excel 2007 по умолчанию, желательно без сохранения ранее сохраненного файла .xlsx?

+0

Нужно ли вам генерировать файл Excel. Вы можете сгенерировать CSV-файл, который будет намного легче обрабатывать. Вы можете избежать ограничения строки в Excel. – user3501749

+0

Вы используете файл .xls? Если это может быть так, ваша проблема. –

+0

Если у вас нет особых причин использовать Interop (например, надстройка Excel и вы делаете это в интерактивном режиме), то я настоятельно рекомендую вам не создавать файлы Excel таким образом. Он очень медленный и [не поддерживается в некоторых сценариях] (https://support.microsoft.com/en-gb/help/257757/considerations-for-server-side-automation-of-office). Что-то в управляемом коде, например [ClosedXML] (https://github.com/ClosedXML/ClosedXML), может быть лучше. –

ответ

0

Вчера я столкнулся с аналогичной проблемой, и решение заключается в изменении настроек Excel для создания файлов xlsx по умолчанию.

В Excel: Файл -> Параметры -> Сохранить -> Сохранить файлы в этом формате

Ваш по умолчанию, вероятно, 'Excel 97-2003 (* .xls)', как у меня было. Если вы измените его на «Excel Workbook (* .xlsx)», ваш код будет работать.