如何使用开放的 XML C# 从 .xlsx 获取单元格中显示的值

Posted

技术标签:

【中文标题】如何使用开放的 XML C# 从 .xlsx 获取单元格中显示的值【英文标题】:How to get value shown in cell from .xlsx using open XML C# 【发布时间】:2013-05-20 05:11:23 【问题描述】:

我是 C# 新手并打开 XML,所以请耐心等待我的无知。

我有这个问题:

我需要从 .xlsx 文件中获取单元格值。我可以使用 XlGetCellValue 方法做到这一点。 但是当一个单元格(例如 sheet1 中的 A2)从另一个单元格(B2 sheet2)获取它的值时

XlGetCellValue("", "Sheet1", "A2") 返回Sheet2!B2Joe

或者当单元格包含计算时(如 =C2+D2),XlGetCellValue(...) 返回C2+D2120

有没有简单的方法来获得“Joe”和“120”的值?

【问题讨论】:

我会查看这个 SO 页面,看看这是否对您有帮助 [SO 页面][1] [1]:***.com/questions/5115257/… 【参考方案1】:

这里是 MSDN 的链接,了解如何使用 Open XML SDK 2.5 获取单元格的值。提供了一个代码示例。

How to: Retrieve the values of cells in a spreadsheet document (Open XML SDK)

【讨论】:

这并不能解决问题。 GetCellValue 返回值的方式与 XlGetCellValue 完全相同。不过还是谢谢。【参考方案2】:

如果您尚未下载 OpenXMLSDKToolV25.msi(生产力工具),使用 openxmnl 可能会很痛苦。

基本上它是一个反射工具。您可以打开一个 excel 文档,该工具会创建从头开始构建所需的所有代码。

CellValue 只为价值。使用公式你必须处理单元格公式。

例如。我在 A1 = 1256 in B1 = 2 in C1 "=A1*B1" 中创建了一个 excel 文件 用我得到的 OpenXMLSDKTool 打开文件:

    public Row GenerateRow()
    
        Row row1 = new Row() RowIndex = (UInt32Value)1U, Spans = new ListValue<StringValue>()  InnerText = "1:3"  ;

        Cell cell1 = new Cell() CellReference = "A1" ;
        CellValue cellValue1 = new CellValue();
        cellValue1.Text = "1256";

        cell1.Append(cellValue1);

        Cell cell2 = new Cell() CellReference = "B1" ;
        CellValue cellValue2 = new CellValue();
        cellValue2.Text = "2";

        cell2.Append(cellValue2);

        Cell cell3 = new Cell() CellReference = "C1" ;
        CellFormula cellFormula1 = new CellFormula();
        cellFormula1.Text = "A1*B1";
        CellValue cellValue3 = new CellValue();
        cellValue3.Text = "2512";

        cell3.Append(cellFormula1);
        cell3.Append(cellValue3);

        row1.Append(cell1);
        row1.Append(cell2);
        row1.Append(cell3);
        return row1;
    

从中您可以注意到 CellValue 和 CellFormula 都是 Cell 的子级。 所以,假设你可以检索你的 Row r 你可以有这个:

Cell c = r.Elements<Cell>().ElementAt(2);
CellValue cv = c.CellValue;
CellFormula cf = c.CellFormula;

【讨论】:

以上是关于如何使用开放的 XML C# 从 .xlsx 获取单元格中显示的值的主要内容,如果未能解决你的问题,请参考以下文章

C# - 如何从 xml 中获取特定值

如何从 C# 中的 xml 元素中获取最高值?

如何使用 C# 和 OleDbConnection 读取 .xlsx 和 .xls 文件?

C#如何从xml文件中获取所有元素名称

如何从 C# 中的 XML Web 服务获取值?

如何将xml传递给C#中的View?