Есть ли прямой способ экспортировать список списков (т.е. List<List<T>>) в Excel 2003 с помощью C #?
Я разбираю большие текстовые файлы и экспортирую в Excel. Запись по одной ячейке за раз создает слишком много накладных расходов. Я решил использовать List<T>, чтобы не беспокоиться об указании количества строк или столбцов.
В настоящее время я дожидаюсь конца файла, а затем помещаю содержимое моего List<List<object>> в двумерный массив. Затем массив можно установить как значение объекта Excel.Range. Это работает, но похоже, что я могу взять свой список списков, не беспокоясь о количестве строк или столбцов, и просто выгружать его на лист из A1 куда угодно.
Вот фрагмент кода, который я хотел бы заменить или улучшить:
object oOpt = System.Reflection.Missing.Value; //for optional arguments
Excel.Application oXL = new Excel.Application();
Excel.Workbooks oWBs = oXL.Workbooks;
Excel._Workbook oWB = oWBs.Add(Excel.XlWBATemplate.xlWBATWorksheet);
Excel._Worksheet oSheet = (Excel._Worksheet)oWB.ActiveSheet;
int numberOfRows = outputRows.Count;
int numberOfColumns = int.MinValue;
//outputRows is a List<List<object>>
foreach (List<object> outputColumns in outputRows)
{
if (numberOfColumns < outputColumns.Count)
{ numberOfColumns = outputColumns.Count; }
}
Excel.Range oRng = oSheet.get_Range("A1", oSheet.Cells[numberOfRows,numberOfColumns]);
object[,] outputArray = new object[numberOfRows,numberOfColumns];
for (int row = 0; row < numberOfRows; row++)
{
for (int col = 0; col < outputRows[row].Count; col++)
{
outputArray[row, col] = outputRows[row][col];
}
}
oRng.set_Value(oOpt, outputArray);
oXL.Visible = true;
oXL.UserControl = true;
Это работает, но я бы предпочел использовать список непосредственно в Excel, чем выполнять промежуточный шаг по созданию массива только для Excel. Любые идеи?