打开xml sdk读取excel公式单元格

时间:2014-01-21 05:38:02

标签: c# excel asp.net-mvc-4 openxml-sdk

我在单元格C4中有excel文件,其中包含公式= SUM(C2:C3)。我在单元格C2和C3中分别有值15和17。以编程方式,我希望能够执行C4公式并返回值32(公式的结果)。

有人建议我应该使用OpenXml SDK。因为此代码将由Windows Azure网站托管和使用。

到目前为止,这是我的代码,单元格不执行C4中的公式。

string filename = Server.MapPath("/") + "ExcelData.xlsx";

using (SpreadsheetDocument document = SpreadsheetDocument.Open(filename, true))
{
    document.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true;
    document.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true;

    Sheet sheet = document.WorkbookPart.Workbook.Descendants<Sheet>().SingleOrDefault(s => s.Name == "myRange1");
    if (sheet == null)
    {
        throw new ArgumentException(
            String.Format("No sheet named {0} found in spreadsheet {1}", "myRange1", filename), "sheetName");
    }
    WorksheetPart worksheetPart = (WorksheetPart)document.WorkbookPart.GetPartById(sheet.Id);

    int rowIndex = int.Parse("C4".Substring(1));

    Row row = worksheetPart.Worksheet.GetFirstChild<SheetData>().
            Elements<Row>().FirstOrDefault(r => r.RowIndex == rowIndex);

    Cell cell = row.Elements<Cell>().FirstOrDefault(c => "C4".Equals(c.CellReference.Value));

}

1 个答案:

答案 0 :(得分:5)

document.WorkbookPart.Workbook.CalculationProperties.ForceFullCalculation = true;
document.WorkbookPart.Workbook.CalculationProperties.FullCalculationOnLoad = true;

根据MSDN

  

使用 CellFormula (&lt; f&gt;)元素来定义公式文本。公式   可以包含包含各种各样的数学表达式   预定义功能。 CellValue (&lt; v&gt;)元素存储缓存   公式值基于上次计算公式的时间。