我的excel有数以百万计的记录(约110万),当我尝试用WorkSheet.Cellsrow逐个单元格读取时,cloumn非常慢。
相反,如果我使用,WorkSheet.Cells.CheckCell(行,列)的性能是非常好的。
你能告诉我这两个API的区别吗?
发布于 2018-02-19 13:20:43
Worksheet.Cells.CheckCell()是检查单元格是否存在的最正确的方法。
如果单元格不存在,CheckCell方法将不会实例化该单元格。另一方面,如果单元格不存在,Cellsr,c将实例化它。
意思是,
CheckCell可以返回空对象或单元对象。 但是Cellsr,c永远不会返回空,并且总是返回单元对象。
因为Cellsr,c将始终返回cell对象,如果它不存在,它将创建它,这就是为什么,它会影响性能。如果要迭代工作表中的所有现有单元而不创建新单元格,请使用Worksheet.Cells.GetEnumerator()方法。
请参阅下面的示例代码、其注释和控制台输出以供参考。
C#
//Create a workbook
Workbook wb = new Workbook();
//Access first worksheet
Worksheet ws = wb.Worksheets[0];
//At the moment, Cell B4 does not exist
//Therefore check cell will return null
Cell cell = ws.Cells.CheckCell(3, 1);
Console.WriteLine(cell == null); //<<<<<<<<<< It will print - True
//After this statement, cell B4 will be instantiated and it will exist
var o = ws.Cells[3, 1];
//Now check cell will not return null, but it will return cell B4
cell = ws.Cells.CheckCell(3, 1);
Console.WriteLine(cell == null);//<<<<<<<<<< It will print - False控制台输出
True
False更新- 1
请查看下面的示例代码、其注释和控制台输出。说明GetEnumerator()方法还可以返回非空单元格和空单元格.
C#
//Create a workbook
Workbook wb = new Workbook();
//Access first worksheet
Worksheet ws = wb.Worksheets[0];
//Create empty cells
//Cell A4, B6, C8 and D10 all are empty
var o = ws.Cells["A4"];
o = ws.Cells["B6"];
o = ws.Cells["C8"];
o = ws.Cells["D10"];
//Get cells enumerator
var i = ws.Cells.GetEnumerator();
//Iterate all cells
while(i.MoveNext())
{
Cell cell = i.Current as Cell;
//Print cell name
Debug.WriteLine(cell.Name);
}控制台输出
A4
B6
C8
D10备注:我在Aspose做开发人员布道员
https://stackoverflow.com/questions/48863876
复制相似问题