为什么Cell.CellReference是可选的? 如何获得细胞位置?

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

例如,我可以通过如下方式获得一行的单元格:

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

但没有CellReference,我怎么知道单元格的位置?

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

CellReference是可选的,因为如果它缺less,Excel使用“先到先得”的原则(这不是官方的说法)。

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

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

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

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

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