#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. Спасибо, все еще не уверен, почему это не работает на моей машине разработки, но это работает для всех остальных. Я ценю, что вы взглянули на это.