我的问题是在不使用excel Interpol或Macro的情况下获取excel中单元格的位置。只是c#和OpenXML。位置如(A3)。
答案 0 :(得分:0)
当您拥有单元格对象时,请执行此操作以获取字符串“A1”,例如:
myCell.CellReference.Value
如果您想通过参考找到一个单元格,请执行以下操作:
public static Cell getCellByReference(string cellReference, Worksheet ws)
{
return ws.Descendants<Cell>().Where(c => c.CellReference.Value == cellReference).FirstOrDefault();
}
Cell myCell = getCellByReference("A1", actualWorksheet)
答案 1 :(得分:0)
有一本名为Open XML Explained的有用电子书,曾经写过(2007年?)。它解释了OpenXML specification的许多复杂细节。
电子书说有两种方法可以确定单元格的位置:使用CellRefernece属性或没有CellReference属性。
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> (from p.60)
<sheetData>
<row r="5">
<c r="E5">
<v>1234</v>
</c>
</row>
</sheetData>
</worksheet>
这是一个更简单的案例。当您读取单元格数据时,可能存在CellReference属性,如上面的单元格和行标记的r
属性。如果是,则此CellReferernce属性是“A1”或“G32”形式的字符串,其中字母表示列,数字表示行。上面的单元格具有“E5”的CellReference,其对应于电子表格的第E列第E列。您将需要读取此值以确定单元格的位置。 Here is an SO question and answers可以帮助您解析CellReference字符串并获取列索引以帮助确定位置。
<worksheet xmlns="http://.../spreadsheetml/2006/main"> (see p. 58)
<sheetData>
<row>
<c>
<v>42</v>
</c>
</row>
</sheetData>
</worksheet>
无法保证CellRefence属性,就像上面的xml一样。如果CellReference不存在,那么您需要通过文件中数据的位置来确定位置。因此,第一行数据对应于电子表格的第一行。与行内的单元格位置相同。