Excel的C#OpenXML的:我怎么能在Excel中添加新行后获得单元格的位置,(Row row = new Row()); 没有使用Excel国际刑警组织或macros

我的问题是关于获得在Excel中的单元格的位置,而不使用Excel国际刑警组织或macros。 只是C#和OpenXML。 (A3)的位置。

当你有你的单元格对象时,这样做得到string“A1”例如:

myCell.CellReference.Value 

如果你想通过引用find一个单元格,请执行以下操作:

 public static Cell getCellByReference(string cellReference, Worksheet ws) { return ws.Descendants<Cell>().Where(c => c.CellReference.Value == cellReference).FirstOrDefault(); } Cell myCell = getCellByReference("A1", actualWorksheet) 

有一本叫做Open XML Explained的有用的电子书,是早期写的(2007?)。 它解释了许多OpenXML规范的复杂细节。

电子书说有两种方法来确定一个单元格的位置:与CellRefernece属性或没有CellReference属性。

使用CellReference属性

 <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> (from p.60) <sheetData> <row r="5"> <cr="E5"> <v>1234</v> </c> </row> </sheetData> </worksheet> 

这是更简单的情况。 读取单元格数据时,可以像上面的单元格和行标签的r属性一样存在单元格引用属性。 如果是的话,这个CellReferernce属性是一个stringforms的“A1”或“G32”,其中的字母表示列和数字表示的行。 上面的单元格具有对应于电子表格的第5行E列的“E5”的CellReference。 你会想读取这个值来确定单元格的位置。 这里是一个SO问题和答案 ,可以帮助您parsingCellReferencestring,并获取列索引来帮助确定位置。

没有CellReference属性

 <worksheet xmlns="http://.../spreadsheetml/2006/main"> (see p. 58) <sheetData> <row> <c> <v>42</v> </c> </row> </sheetData> </worksheet> 

CellRefence属性不能保证,就像上面的xml一样。 如果CellReference不存在,则需要根据文件中数据的位置确定位置。 所以,第一行数据对应于电子表格的第一行。 与一行内的单元格位置相同。