如果您想要将单元格中的公式直接替换为其计算后的数值,可以使用 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`。然后,我们将单元格的公式移除,以确保只保留数值。最后,我们保存对工作表所做的更改。