为什么Cell.CellReference是可选的?如何获得小区位置呢?

use*_*714 5 excel location reference cell openxml

根据OpenXml规范,CellReference是可选的.但是有没有另一种方法可以获得一个小区的位置?

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

foreach (Row r in sheetData.Elements<Row>())
{
    foreach (Cell c in r.Elements<Cell>())
    {
        Console.WriteLine(c.CellReference);
    }
} 
Run Code Online (Sandbox Code Playgroud)

但是如果没有CellReference,我如何知道细胞的位置?

我做了一些研究,所有解决方案似乎都依赖于将单元格的CellReference与给定的字符串进行比较.

Vin*_*Tan 8

CellReference是可选的,因为如果它缺失,Excel使用"先到先得"原则(顺便说一下,这不是官方术语).

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

第一行类(您将注意到RowIndex也是一个可选属性)将假定SheetData类具有行索引1.并且假定该行中的第一个Cell类具有CellReference"A1"(假设Cell没有分配CellReference).并且假定该行中的第二个Cell类具有CellReference"B1".等等等等.

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

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

假设,如果你有3个未分配的RowIndex-ed Row类,而下一个Row类的RowIndex为8,那么这是一个有效的工作表.你只需要在工作表(如预期)第3行第3行数据,而"4"行类(为8的rowIndex)在工作表排8.