Используя C#, существует ли прямой способ экспортировать список списков (т. Е. List<List<T>>
) в Excel 2003?Экспортировать список списков C# в Excel
Я разбираю большие текстовые файлы и экспортирую в 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. Есть идеи?
Спасибо! Хотя мы не на .NET 3.0, я ценю все ваши разъяснения. – reverendlarry
Без проблем, рад, что это помогает. :-) Только элемент №1 связан с .NET 3.0, все остальные будут применяться в любой .NET Framework. LINQ является основной причиной рассмотрения перехода на 3.0. Это не революционизирует весь ваш код, но в определенных областях LINQ - невероятно приятная функция. –
Спасибо! Это сработало отлично, определенно upvote! Однако одна небольшая деталь, которая может помочь; Мне пришлось добавить к этому коду предложение 'oXL.Quit;', потому что если нет, процессы продолжали работать, и в какой-то момент я начал получать ошибки. – Soph