Комментарии 43
Я не автор данной статьи, но был опыт работы. В целом принцип взаимодействия между этими двумя библиотеками не отличается, но EPPlus работает чуть пошустрее. Можно тут ознакомиться с моими тестами производительности https://m.habr.com/ru/company/arcadia/blog/498032/
Что касается производительности, тема интересная, но, как мне кажется, не очень актуальная для чтения\записи excel. Когда я сталкивался с тем, что файл генерируется дольше чем пользователь готов ждать, я просто добавлял кэширование. Кэшировать можно как данные для отчета так и Excel файл, целиком или даже по частям.
DON'T use dotnetcore/NPOI anymore
a. This project is NOT in maintainence for at least 2 years (no update after 2018)
b. It's a migrated .net core version of NPOI 2.2.1 (which is published 4 years ago)
c. They betray the open source spirit. All the git history from NPOI team are deleted. Neuzilla studio info is removed. Original Readme.txt is removed (all the contributors of NPOI are removed.)
Обычная работа с COM объектами, причем что на С# что на Паскале будет одинакова, за исключением разницы синтаксиса языков. И для построения таких отчётов лучше использовать RAVE компоненты или аналогичные, там и быстрее и не зависит от наличия экселя на компе.
Вы ошибаетесь. Большинство библиотек сейчас давным давно ушло от использования COM ибо это медленно. Осталась только старый добрый MicrosoftExcelInterop. Все остальные, в том числе EPPlus используют прямую работу с файлом, даже в режиме стриминга
Там еще и API сверх неудобнный, и куча подбодных камней при запуске, например, требование установленного офиса. Не уверен, что это было бы быстрее и проще библиотеки. С другой стороны если надо поддерживать старые форматы 98 года, то тут уже почти без вариантов, но тут вроде как раз NPOI решает (или какая-то другая библиотека от японцев, точно уже не помню)
Тут недавно заказчик хотел экспорт в excel примерно 2 тысячи столбцов и до полумиллиона строк в каждой из трёх страниц (это его проблемы что он там собрался дальше делать). Сошлись на CSV, но просто интересно, сжуёт ли задачу эта библиотека?
А не проще сделать в Excel готовый XML-файл, превратить его в шаблон, и рендерить так же как HTML?
Но если кто пропустил, теперь она платная для использованиях в коммерческих продуктах.
Если раньше она была под LGPL лицензией (архивный репозиторий), то теперь она распространяется под PolyForm Noncommercial License 1.0.0, официальное сообщение от компании с историей вопроса можно прочитать у них на сайте.
Как то слишком много кода, строить рисовать колонки, ячейки, стили на стороне на C# так себе подход. Ладно когда еще отчет маленький, но когда он огромный код превратится в кашу.
Мы делаем по другому, создаем шаблон .xlsm типа сводной таблицы, разрисовываем в нем полностью отчет включая стили, форматирование и т.п. далее в скрипте делаем что то типа
ActiveSheet.PivotTables("СводнаяТаблица").ChangePivotCache ActiveWorkbook. _
PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Sheets(Sheets.Count).Name + "!$A:$P")
И используя библиотеку типа ClosedXML/OpenXml
открываем этот шаблон, загружаем в него сырые данные в новый лист и открываем.
Плюсы: Вся логика отчета в Excel, в C# только логика загрузки данных единая для всех отчетов.
Минусы: Нужно хорошо знать Excel и VisualBasic хотя бы на базовом уровне.
Если стили будут динамическими, в зависимости от данных, то это не прокатит(
PS. EPPlus.Core уже давно брошена. Собственно, она и не была никогда серьёзным проектом, в только любительским переносом какой-то версии EPPlus на .NET Core.
PPS. Чтобы не упереться в проблемы при поиске пакетов на nuget.org, я настоятельно советую всем сходить по ссылкам «Project Site» и «Source repository» и почитать, подробности о них. Если этих ссылок у пакета нет, то это повод пройти мимо.
www.hanselman.com/blog/how-do-you-use-systemdrawing-in-net-core
2020-10-22 13:17:39.337 +00:00 [ERR] The type initializer for 'Gdip' threw an exception.
2020-10-22 13:17:39.340 +00:00 [ERR] at System.Drawing.SafeNativeMethods.Gdip.GdipGetGenericFontFamilySansSerif(IntPtr& fontfamily)
at System.Drawing.FontFamily.GetGdipGenericSansSerif()
...
Перешли на ClosedXML. Благо, принцип работы с ним аналогичен EPPlus, а где-то и удобнее. Серьёзных переделок не потребалось.
Мы у себя на докере используем epplus.core под линуксом, так что это реально) был какой то затык там изначально, как раз с либой графической связанный, но решился за несколько минут гуглинга, если интересно, могу подсказать какую либу доставляли ещё
Если важна скорость, то рекомендую https://www.spreadsheetgear.com/ У нас есть несколько серверных решений на основе этой библиотеки. Измерения показали, что SpreadsheetGear работает намного быстрее, чем EPPlus
Старт работы с Excel на C#