Excel C#OpenXML:如何在添加新行后获取excel中单元格的位置(Row row = new Row());不使用excel国际刑警组织或宏

时间:2017-10-16 14:36:54

标签: c# excel openxml

我的问题是在不使用excel Interpol或Macro的情况下获取excel中单元格的位置。只是c#和OpenXML。位置如(A3)。

2 个答案:

答案 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属性。

使用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字符串并获取列索引以帮助确定位置。

没有CellReference属性

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

无法保证CellRefence属性,就像上面的xml一样。如果CellReference不存在,那么您需要通过文件中数据的位置来确定位置。因此,第一行数据对应于电子表格的第一行。与行内的单元格位置相同。