1

我需要从我的工作表中删除所有 Excel 公式(用其结果替换公式)然后保存文件。例如 - 当我使用 OpenXML 打开文件时,我希望在单元格中包含 2013-04-11 而不是 B3+13

我发现这篇文章 http://office.microsoft.com/en-us/excel-help/replace-a-formula-with-its-result-HP010066258.aspx

它有效 - 保存后没有公式。我在 C# 中需要同样的效果。我在互联网上尝试了很多解决方案,但仍然没有希望。

                string source = @"C:\Source\doc.xlsx";
            object Unknown = Type.Missing;

            Workbook doc = newApp.Workbooks.Open(
                source,
                 Unknown, 
                 Unknown, 
                 Unknown, 
                 Unknown, 
                 Unknown, 
                 Unknown, 
                 Unknown, 
                 Unknown, 
                 Unknown, 
                 Unknown, 
                 Unknown, 
                 Unknown, 
                 Unknown, 
                 Unknown);

            newApp.Calculation = Microsoft.Office.Interop.Excel.XlCalculation.xlCalculationManual;

            doc.ForceFullCalculation = true;
            newApp.CalculateFull();
            newApp.CalculateBeforeSave = true;

            doc.SaveAs("c:\\temp\\recalc.xlsx", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing,
            false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            doc.Close();

那么问题是什么?为什么我可以看到“=DY3+1”而不是“2013-04-11”?

4

2 回答 2

3

选择包含您的数据的范围,然后将值复制并粘贴到位:

using Excel = Microsoft.Office.Interop.Excel;
foreach (Excel.Worksheet ws in doc.Worksheets)
{
    Excel.Range targetRange = (Excel.Range)ws.UsedRange;
    targetRange.Copy(Type.Missing);
    targetRange.PasteSpecial(Excel.XlPasteType.xlPasteValues, 
        Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false);
}

这复制了您发布的文档的“用计算值替换公式”部分。可以选择所有工作表并在 Excel 本身中特殊复制/粘贴以获取结果而不是公式,但是我在通过代码处理分组工作表时遇到了一些问题。

于 2013-04-16T13:36:59.843 回答
0

计算公式会保留公式及其结果。如果您想用其结果值覆盖公式,那么您需要:
- 将其值设置为其值: Range.Value2=Range.value2
或使用复制和粘贴特殊值

于 2013-04-16T13:35:53.303 回答