Мне нужен доступ к книгам Excel из .Net. Я знаю все о различных способах сделать это (я написал их в Сообщение блога), и я знаю, что использование собственного компонента .Net будет самым быстрым. Но вопрос в том, какая из составляющих выигрывает? Кто-нибудь их сравнивал? Я использовал Syncfusion XlsIO, но это очень медленно для некоторых ключевых операций (например, удаление строк в книге, содержащей тысячи именованных диапазонов).





Не могу помочь вам с исходным вопросом, но знаете ли вы, что вы можете получить доступ к файлам Excel с помощью OleDbConnection и, следовательно, рассматривать их как базу данных? Затем вы можете читать листы в DataTable, вносить все необходимые изменения в данные в вашем приложении, а затем сохранять все это обратно в файл с помощью OleDbConnection.
Да, но я не собираюсь публиковать их оба из любезности Syncfusion (они просят вас не публиковать тесты производительности), потому что я не опытный тестировщик, поэтому мои тесты, вероятно, несколько ошибочны, но в основном потому, что то, что вы на самом деле тестируете, делает огромная разница в том, кто и сколько выиграет.
Я взял один из их примеров «производительности» и добавил ту же процедуру в EPPlus, чтобы сравнить их. XLSIO был примерно на 15% быстрее с простыми вставками, в зависимости от соотношения строк / столбцов (я пробовал несколько), использование памяти казалось очень похожим. Когда я добавил процедуру, которая после добавления всех строк удаляла каждую 10-ю строку, а затем вставляла новую строку на 2 строки выше, - XLSIO был значительно медленнее в этом случае.
Стандартный тест для вас практически бесполезен. Вам нужно попробовать их друг против друга в конкретных сценариях, которые вы используете.
Я использую EPPlus несколько лет, и производительность была в порядке, я не помню, чтобы кричал на него.
Более достойными вашего внимания являются функциональность, поддержка (по моему опыту, Syncfusion была хорошей), документация, доступ к исходному коду, если это важно, и, что немаловажно, насколько важен для вас API, синтаксис может быть достаточно разный. например. Именованные стили
XLSIO
headerStyle.BeginUpdate();
workbook.SetPaletteColor(8, System.Drawing.Color.FromArgb(255, 174, 33));
headerStyle.Color = System.Drawing.Color.FromArgb(255, 174, 33);
headerStyle.Font.Bold = true;
headerStyle.Borders[ExcelBordersIndex.EdgeLeft] .LineStyle = ExcelLineStyle.Thin;
headerStyle.Borders[ExcelBordersIndex.EdgeRight] .LineStyle = ExcelLineStyle.Thin;
headerStyle.Borders[ExcelBordersIndex.EdgeTop] .LineStyle = ExcelLineStyle.Thin;
headerStyle.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin;
headerStyle.EndUpdate();
EPPlus
ExcelNamedStyleXml headerStyle = xlPackage.Workbook.Styles.CreateNamedStyle("HeaderStyle");
headerStyle.Style.Fill.PatternType = ExcelFillStyle.Solid; // <== needed or BackgroundColor throws an exception
headerStyle.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(255, 174, 33));
headerStyle.Style.Font.Bold = true;
headerStyle.Style.Border.Left.Style = ExcelBorderStyle.Thin;
headerStyle.Style.Border.Right.Style = ExcelBorderStyle.Thin;
headerStyle.Style.Border.Top.Style = ExcelBorderStyle.Thin;
headerStyle.Style.Border.Bottom.Style = ExcelBorderStyle.Thin;
Пол, спасибо. Я знал об этом (возможно, мне стоит включить это в свой блог). Однако в данном случае мне действительно нужны не те данные. Это такие вещи, как стиль и форматирование ячеек и т. д. Сэм