Каков самый быстрый способ экспорта DataTable в C # в MS Excel?

Как говорится в заголовке, у меня есть массив DataTables на C #, который мне нужно экспортировать в Excel как можно быстрее, имея разумное потребление памяти.

Я попытался использовать следующее:

  1. EPPlus (в настоящее время самый быстрый)
  2. OpenXML (медленнее EPPlus – не уверен, что это имеет смысл, поскольку EPPlus вероятно, использует OpenXML ?)
  3. SpreadsheetLight (медленная)
  4. ClosedXML (исключение OOM с большими таблицами)

Предполагая массивные наборы данных (до 1 000 000 строк, 50 столбцов) и бесконечное время разработки, что является самым быстрым способом экспорта?

EDIT: Мне нужно больше, чем просто базовая таблица, начиная с A1. Мне нужна таблица для начала в ячейке по своему выбору, мне нужно иметь возможность форматировать ячейки с данными и иметь несколько вкладок, все из которых содержат свой собственный набор данных.

Благодарю.

Excel – это просто формат файла XML. Если вы удалите все вспомогательные библиотеки и подумайте, что вы можете лучше работать над кодированием, чем люди в EPPPlus или OpenXML, вы можете просто использовать XML Stream Writer и записать правильно помеченный Excel XML в файл.

Вы можете использовать все виды стандартного буферизации и кеширования файлов, чтобы сделать запись как можно быстрее, но ничто из этого не будет характерно для файла Excel – просто стандартная буферизованная запись.

Вы не указали каких-либо требований относительно того, как данные должны выглядеть в файле excel. Я полагаю, вам не нужна сложная логика, просто настройка правильных данных в правильных столбцах. В этом случае вы можете поместить свои данные в CSV (значения, разделенные запятыми). Excel может прочитать этот файл просто отлично.

Пример файла CSV:

 Column 1,Column 2,Column 3 value1,value1,value1 value2,value2,value2 ... 

В соответствии с запросом, вот пример кода для создания csv-файла.

 var csvFile = new StringBuilder(); csvFile.AppendLine("Column 1,Column 2,Column 3"); foreach (var row in data) { csvFile.AppendLine($"{row.Column1Value},{row.Column2Value}, row.Column3Value}"); } File.WriteAllText(filePath, csvFile.ToString()); 

Вы можете использовать некоторые текстовые библиотеки для синтаксического анализа файлов csv, но это самый простой способ, которым я могу думать об atm.

Предполагая … бесконечное время разработки, что является самым быстрым способом экспорта?

Сделайте свой собственный экспорт XLSX вручную. Это сжатый XML. Таким образом, ZipArchive свой XML в ZipArchive и он будет более или менее быстрым, насколько это возможно. Если вы потокуете это, а не буферируете, то использование памяти должно быть исправлено для экспорта любого размера.

  • Как повернуть текст в ячейке таблицы Excel с помощью OpenXML и C #
  • Как повысить производительность поиска значений из SharedStringTable в инструментах электронной таблицы OpenXml Excel?
  • Только чтение или блокировка определенных ячеек или строк с помощью открытого xml sdk
  • Можно ли рассчитать ширину столбца Excel с использованием .Net или OpenXml без использования объектов System.Drawing Graphics и Bitmap?
  • C # Open XML SDK 2.0 Экземпляр Excel - диапазон загрузки ячеек из массива строк
  • OpenXML занимает гораздо больше времени, чем OLEDB, чтобы читать строки из листа Excel
  • Не удалось прочитать файл excel с помощью OpenXML sdk
  • Open XML Reading Excel файл не вводит цикл для чтения листа excel
  • Открытая таблица OpenXML повреждена в Excel
  • Как создать Hypelink в Excel с помощью openxml в Java
  • C # и OpenXML: вставьте изображение в документ excel
  • Давайте будем гением компьютера.