openxml对worksheet数值化

如果您想要将单元格中的公式直接替换为其计算后的数值,可以使用 OpenXML SDK 的 `CellValue` 属性来获取计算后的数值。以下是修改后的代码:

cs 复制代码
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using System;

public class ExcelParser
{
    public static void ParseExcel(string filePath)
    {
        using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filePath, true))
        {
            WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
            WorksheetPart worksheetPart = workbookPart.WorksheetParts.FirstOrDefault();

            if (worksheetPart != null)
            {
                Worksheet worksheet = worksheetPart.Worksheet;
                SharedStringTable sharedStringTable = workbookPart.SharedStringTablePart.SharedStringTable;

                foreach (var cell in worksheet.Descendants<Cell>())
                {
                    if (cell.CellFormula != null)
                    {
                        // 计算单元格公式并将计算结果设置为单元格的值
                        cell.CellValue = new CellValue(ComputeCellValue(cell, sharedStringTable).ToString());
                        cell.CellFormula.Remove();
                    }
                }

                worksheetPart.Worksheet.Save();
            }
        }
    }

    private static object ComputeCellValue(Cell cell, SharedStringTable sharedStringTable)
    {
        if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
        {
            int index = int.Parse(cell.InnerText);
            return sharedStringTable.ChildElements[index].InnerText;
        }
        else
        {
            return cell.InnerText;
        }
    }
}

在此代码中,我们检查单元格是否包含公式 (`cell.CellFormula != null`)。如果是,则调用 `ComputeCellValue` 方法来计算公式的值,并将其设置为单元格的 `CellValue`。然后,我们将单元格的公式移除,以确保只保留数值。最后,我们保存对工作表所做的更改。

相关推荐
云中飞鸿4 小时前
wpf 类图
c#
世洋Blog5 小时前
SiYangUnityEventSystem,一个Unity中的事件系统
观察者模式·unity·c#·游戏引擎·事件系统
切糕师学AI5 小时前
如何用 VS Code + C# Dev Kit 创建类库项目并在主项目中引用它?
开发语言·c#
William_cl6 小时前
【CSDN 专栏】C# ASP.NET控制器过滤器:自定义 ActionFilterAttribute 实战(避坑 + 图解)
c#·asp.net·状态模式
William_cl6 小时前
【CSDN 专栏】C# ASP.NET Razor 视图引擎实战:.cshtml 从入门到避坑(图解 + 案例)
开发语言·c#·asp.net
isyoungboy6 小时前
c++使用win新api替代DirectShow驱动uvc摄像头,可改c#驱动
开发语言·c++·c#
技术支持者python,php7 小时前
USB摄像头采集数据
人工智能·c#
c#上位机18 小时前
halcon刚性变换(平移+旋转)——vector_to_rigid
图像处理·人工智能·计算机视觉·c#·halcon
Miss_SQ18 小时前
Webgl打包后删除StreamingAssets文件夹下多余资源
unity·c#·webgl
小猪快跑爱摄影18 小时前
【AutoCad 2025】【C#】零基础教程(二)——遍历 Entity 插件 =》 AutoCAD 核心对象层级结构
开发语言·c#·autocad