使用EPPLUS缓慢加载.CSV文件

时间:2015-06-08 12:35:02

标签: c# epplus

我有大量的.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”参数,但加载时间是一样的。

您遇到了哪些加载时间?

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:1)

我遇到了与LoadFromCollection非常相似的问题。 EPPlus必须考虑其方法中的所有情况,以便一般地加载数据,因此存在大量开销。我最终缩小了完成该方法的瓶颈,最终只是手动将数据从集合转换为EPPlus中的Excel Cell对象。可能在我的出口中节省了几分钟。

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

C# Read a particular value from CSV file