У кого-нибудь есть тесты компонентов .Net Excel IO? - PullRequest
5 голосов
/ 18 августа 2008

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

Ответы [ 3 ]

5 голосов
/ 21 августа 2008

Я не выполнил никаких надлежащих тестов, но я попробовал несколько других компонентов и обнаружил, что SpreadsheetGear был значительно быстрее, чем XlsIO, который я использовал раньше. Я написал некоторые из моих выводов в этом сообщении

1 голос
/ 18 августа 2008

Не можете помочь с исходным вопросом, но знаете ли вы, что вы можете получить доступ к файлам Excel с помощью OleDbConnection и, следовательно, рассматривать его как базу данных? Затем вы можете прочитать рабочие листы в DataTable, выполнить все необходимые изменения для данных в вашем приложении, а затем сохранить их обратно в файл, используя OleDbConnection.

0 голосов
/ 06 ноября 2017

Да, но я не собираюсь публиковать их оба из любезности 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...