5

根据 OpenXml 规范,CellReference 是可选的。但是有没有其他方法可以获取单元格的位置?

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

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

但是没有 CellReference,我怎么知道细胞的位置?

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

4

1 回答 1

10

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

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

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

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

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

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

于 2012-11-02T13:05:44.430 回答