Получение диапазона в Excel 2007, все еще существует ограничение по строке?

#c# #excel #range

#c# #excel #диапазон

Вопрос:

Пожалуйста, посмотрите пример ниже, этот код работает просто отлично, если ограничение по строкам меньше 65536, я использую библиотеку объектов Micorsoft Excel 12.0 версии v1.6, кто-нибудь знает об обходном пути или это было исправлено при загрузке?

 using Excel = Microsoft.Office.Interop.Excel;

long rowLimit = 65537;

object[,] items = new object[rowLimit, 5];

for( long rowIndex = 0; rowIndex < rowLimit;   rowIndex )
{
    for( long columnIndex = 0; columnIndex < 5;   columnIndex )
    {
        items[rowIndex, columnIndex] = String.Format( "{0}-{1}", rowIndex, columnIndex );
    }
}

var xlApp = new Excel.Application();
var xlWorkBook = xlApp.Workbooks.Add( Excel.XlWBATemplate.xlWBATWorksheet );
var xlWorkSheet = xlWorkBook.Worksheets.Add();
xlWorkSheet.Name = "Test Sheet";

Excel.Range topLeft = (Excel.Range)xlWorkSheet.Cells[1,1];
Excel.Range bottomRight = (Excel.Range)xlWorkSheet.Cells[rowLimit, 5]; // THIS LINE ALWAYS EXCEPTIONS IF rowLimit > 65536
Excel.Range range = xlWorkSheet.Range[topLeft, bottomRight];
range.Value = items;
  

Комментарии:

1. Странно, работает для меня в тех же версиях (c # 2k8) Excel.Range bottomRight = (Excel.Range)xlWorkSheet.Cells[999999, 5]; bottomRight.Value2 = "123"; xlWorkBook.SaveCopyAs(...) ведет себя так, как ожидалось.

Ответ №1:

В Excel 2007 и Excel 2010 листы содержат 1048576 строк. Я проверил слегка измененную версию вашего кода, и она отлично работала с полным числом (long RowLimit = 1048576), хотя это заняло некоторое время.

Одно из изменений в вашем коде заключается в том, что я удалил шаблон в Workbooks.Add. Может быть, проблема в вашем шаблоне — возможно, это xls-файл в стиле Excel 2003, и это ограничивает количество строк?

Комментарии:

1. Спасибо, все еще не уверен, почему это не работает на моей машине разработки, но это работает для всех остальных. Я ценю, что вы взглянули на это.