2012-11-01 39 views
4

根据OpenXml规范,CellReference是可选的。但是有没有另外一种方法来获得细胞的位置?为什么Cell.CellReference是可选的?如何获得细胞位置?

foreach (Row r in sheetData.Elements<Row>()) 
{ 
    foreach (Cell c in r.Elements<Cell>()) 
    { 
     Console.WriteLine(c.CellReference); 
    } 
} 

但是,如果没有CellReference,我怎么知道这些细胞的位置:

例如,我可以像得到一个行的细胞?

我已经做了一些研究,所有的解决方案似乎都依赖于比较单元格的CellReference和给定的字符串。

回答

6

CellReference是可选的,因为如果缺少它,Excel将使用“先来先服务”原则(顺便说一句,这不是官方的术语)。

当所有Cell类缺少CellReference属性时,会发生什么情况,Excel将根据它遇到Row和Cell类的顺序进行解析。

在SheetData类中的1st Row类(您会注意到RowIndex也是一个可选属性)将被假定为具有行索引1.并且假定该行中的第1个Cell类具有CellReference“ A1“(假定Cell没有分配CellReference)。并且该行中的第二个Cell类被假定为CellReference“B1”。等等等等。

下一个Row类(如果RowIndex属性也未分配)将被假定为第二行。

基本上,如果缺少所有RowIndex和CellReference属性,则所有Cell类都会聚集在工作表的左上角。

假设性地说,如果您有3个未分配的RowIndex-ed Row类,并且下一个Row类的RowIndex为8,那么这是一个有效的工作表。工作表中前3行中的前3行数据(如预期的那样)以及工作表中第8行的“第4”行类(RowIndex为8)。

相关问题