使用EPPLUS加载.csv文件的速度很慢

本文关键字:速度 文件 EPPLUS 加载 csv 使用 | 更新日期: 2023-09-27 17:54:06

我有很多。csv文件,我需要在应用一些格式化后转换为。xslx。

一个包含大约20,000行和7列的文件需要12分钟来转换。如果文件包含超过100,000,则运行> 1小时。

这对我来说是不可接受的。

代码片段:

        var format = new ExcelTextFormat();
        format.Delimiter = ';';
        format.Encoding = new UTF7Encoding();
        format.Culture = new CultureInfo(System.Threading.Thread.CurrentThread.CurrentCulture.ToString());
        format.Culture.DateTimeFormat.ShortDatePattern = "dd.mm.yyyy";
        using (ExcelPackage package = new ExcelPackage(new FileInfo(file.Name))){
            ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(Path.GetFileNameWithoutExtension(file.Name));
            worksheet.Cells["A1"].LoadFromText(new FileInfo(file.FullName), format);
        }

我已经验证了是LoadFromText命令花费了使用的时间。

有没有办法加快速度?我试过没有"format"参数,但加载时间是一样的。

你的加载时间是多少?

使用EPPLUS加载.csv文件的速度很慢

我的建议是自己读取文件,然后使用库来创建文件。

读取CSV的代码可以像下面这样简单:
List<String> lines = new List<String>();
using (StreamReader reader = new StreamReader("file.csv"))
{
    String line; 
    while((line = reader.ReadLine()) != null)
    {
        lines.add(line);
    }
}
//Now you got all lines of your CSV
//Create your file with EPPLUS
foreach(String line in lines)
{
    var values = line.Split(';');
    foreach(String value in values)
    {
        //use EPPLUS library to fill your file
    }
}

我在LoadFromCollection中遇到了一个非常相似的问题。EPPlus必须考虑到它们的方法中的所有情况才能像这样加载数据,所以有很多开销。我最终缩小了该方法的瓶颈,并最终在EPPlus中手动将数据从集合转换为Excel Cell对象。可能节省了我几分钟的导出时间。

关于如何读取csv数据的大量示例:

从CSV文件中读取一个特定的值