根据OpenXml规范,CellReference是可选的。但是有没有另一种方法可以获得一个小区的位置?
例如,我可以通过以下方式获取行的单元格:
foreach (Row r in sheetData.Elements<Row>())
{
foreach (Cell c in r.Elements<Cell>())
{
Console.WriteLine(c.CellReference);
}
}
但是如果没有CellReference,我如何知道细胞的位置?
我做了一些研究,所有解决方案似乎都依赖于将单元格的CellReference与给定的字符串进行比较。
答案 0 :(得分:7)
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行数据,并将“4th”Row类(RowIndex为8)作为工作表中的第8行。