c# - 自动列宽 EPPlus 慢

标签 c# performance epplus-4

我使用此代码将数据加载到工作表(C#、EPPlus 4.04)并自动设置列宽:

workSheet.Cells["A1"].LoadFromCollection(itemsToExport, PrintHeaders: true);
workSheet.Cells[workSheet.Dimension.Address].AutoFitColumns();

有一个明显的性能损失,似乎与工作表中的记录数呈线性关系。例如。 15K 条记录相差 2 秒,我必须创建多个文件。

有没有办法在不诉诸异步处理等的情况下加快速度?

请注意,在填充数据之前设置 AutoFitColumns 不起作用,列将保持对数据来说太小的宽度。

最佳答案

Ron Beyer 的评论是正确的。我从epplus.codeplex.com下载了源代码并查看了函数:

/// <summary>
/// Set the column width from the content of the range.
/// Note: Cells containing formulas are ignored if no calculation is made.
///       Wrapped and merged cells are also ignored.
/// </summary>
/// <param name="MinimumWidth">Minimum column width</param>
/// <param name="MaximumWidth">Maximum column width</param>
public void AutoFitColumns(double MinimumWidth, double MaximumWidth)

不幸的是,所有单元格都将循环处理。也许我应该使用像 Courier 这样的等间距字体并自己计算宽度。

EPPlus 库中的 AutoFitColumns 需要额外注意,因为它的代码复杂度为 35 atm(但请继续努力!)。

关于c# - 自动列宽 EPPlus 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32075037/

相关文章:

c# - 如何检测 COM 应用程序当前是否正在运行?

c# - 如何使用 EPPlus 一次插入一行

c# - 并发读取和写入 Excel 文件

c# - C#中的变量对象

C# 4.0 和 .Net 3.5

c# - 无法创建与 mySQL 的 C# 连接

c++ - vector 是否比 std::array 多使用一次解引用来访问元素?

performance - Xamarin Mvvmcross 启动 dll 加载缓慢

objective-c - 哪种类型的数组用于大量数字?

excel - 工作表位置超出范围。连接已关闭。使用EPPLUS时