【问题标题】:Slow loading of .CSV files using EPPLUS使用 EPPLUS 缓慢加载 .CSV 文件
【发布时间】:2015-06-08 12:35:01
【问题描述】:

我有大量 .csv 文件需要在应用一些格式后转换为 .xslx。

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

很遗憾,这对我来说是不可接受的。

代码sn-p:

        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 命令花费了所用的时间。

有没有办法加快速度? 我试过不带“格式”参数,但加载时间是一样的。

您遇到的加载时间是多少?

【问题讨论】:

  • 因为它是一个简单的 CSV,您是否尝试过使用 StreamReader 读取它?
  • 不,我对 C# 很陌生,不知道如何解决它,但我会考虑你的建议。谢谢。

标签: c# epplus


【解决方案1】:

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

读取 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
    }
}

【讨论】:

  • 谢谢,这让我开始了!处理时间有何不同!以前需要 18 分钟才能处理的文件现在可以在 18 秒内运行!!
【解决方案2】:

我遇到了与LoadFromCollection 非常相似的问题。 EPPlus 必须在他们的方法中考虑到所有情况,才能像这样一般地加载数据,因此会产生大量开销。我最终缩小了该方法的瓶颈,最终只是手动将数据从集合覆盖到 EPPlus 中的 Excel Cell 对象。可能在我的导出中节省了几分钟。

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

C# Read a particular value from CSV file

【讨论】:

  • @Gianni B 对不起,我不是故意踩你的脚趾的——你比我早了一分钟 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多