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`。然后,我们将单元格的公式移除,以确保只保留数值。最后,我们保存对工作表所做的更改。

相关推荐
weixin_520649872 小时前
WinForm数据展示组件ListView
c#
程序设计实验室7 小时前
Spark.NET:一个试图把 Django / Rails 式开发体验带回 .NET 世界的全栈 Web 框架。
c#
byoass8 小时前
智巢AI知识库深度解析:企业文档管理从大海捞针到精准狙击的进化之路
开发语言·网络·人工智能·安全·c#·云计算
njsgcs12 小时前
solidworks自动标注折弯4 无向图 c#
开发语言·c#·solidworks
我是唐青枫13 小时前
C#.NET ThreadLocal 深入解析:线程独享数据、性能收益与实战边界
c#·.net
JQLvopkk15 小时前
C# 工业级上位机:交互实战
开发语言·c#·交互
kingwebo'sZone15 小时前
PdfiumViewer使用权限控制期操作按钮(PdfViewer其实也可以完整兼容)
c#
张小俊_16 小时前
WPF 跨线程 UI 更新与硬编码赋值引发的 Bug 排查
c#·bug·wpf
無斜16 小时前
【CAPL实用开发】--- CAPL调用 .NET DLL
开发语言·c#·capl·canoe
puamac17 小时前
UcTabWindow 布局多tab,加载编辑器和资源管理器等自定义控件
c#·编辑器·datagridview