使用 EPPLUS 缓慢加载 .CSV 文件
Slow loading of .CSV files using 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" 参数,但加载时间是一样的。
您遇到的加载时间是多少?
这里我的建议是自己读取文件,然后使用库创建文件。
读取 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 数据的大量示例:
C# Read a particular value from CSV file
我有大量 .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" 参数,但加载时间是一样的。
您遇到的加载时间是多少?
这里我的建议是自己读取文件,然后使用库创建文件。
读取 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 数据的大量示例:
C# Read a particular value from CSV file