[英]Saving recalculated Excel file
我需要從我的工作表中刪除所有Excel公式(用其結果替換公式)然后保存文件。 例如 - 當我使用OpenXML打開文件時,而不是B3 + 13我希望在單元格中有2013-04-11
我找到了這篇文章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”?
選擇包含數據的范圍,然后復制並粘貼值:
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中自行復制/粘貼以獲得結果而不是公式,但是我通過代碼處理分組工作表時遇到了一些問題。
計算公式會保留公式及其結果。 如果要用其結果值覆蓋公式,則需要:
- 將其值設置為其值:Range.Value2 = Range.value2
或使用復制和粘貼特殊值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.