我使用EPPlus将.csv文件转换为.xlsx,并使用ZXing将其中一列转换为条形码图像。一切正常但AddPicture的性能引发了一个问题。 .csv文件可以有数千条记录,记录计数越大,应用程序运行的速度就越慢。我已将问题缩小到AddPicture函数并读取它将图像复制到临时文件夹,将其插入电子表格,并删除临时图像,这是很多磁盘I / O.如果我注释掉AddPicture函数,应用程序将在1-2秒内运行。启用AddPicture函数会以指数方式(基于记录数)将运行时增加到无法使用的程度。
for (var r = 2; r < (workSheet.Dimension.End.Row + 1); r++)
{
//set row height
workSheet.Row(r).Height = 50;
//create barcode string
string myBarcode = String.Format("{0}", workSheet.Cells[r, 7].Text);
//create image
string newFileName = "C:/DUMP/barcodes/" + myBarcode + ".jpeg";
if (!File.Exists(newFileName))
{
createBarcode(myBarcode, 100, 40);
}
//add image to worksheet
var picture = workSheet.Drawings.AddPicture(myBarcode, new FileInfo (newFileName));
//set image position
int eppRow = r - 1;
picture.SetPosition(eppRow, 10, 7, 5);
//enable "TwoCell" to maintain column anchors
picture.EditAs = OfficeOpenXml.Drawing.eEditAs.TwoCell;
}
我首先尝试在内存中创建图像并直接插入电子表格。上面显示的版本是将图像写入磁盘,并且只在必要时才创建新图像。在处理大量记录时,这两个版本都表现不佳。
EPPlus可以很好地转换.csv文件,ZXing可以快速创建图像。那些工作完美无瑕。但是使用AddPicture将图像插入Excel文件会导致性能问题。有没有人有关于如何解决这个问题的其他建议?