2013-04-16 2 views
1

워크 시트에서 모든 수식을 제거하고 (수식을 그 결과로 바꾸기) 파일을 저장해야합니다. 예를 들어 - 어떤 공식이없는 저장 한 후 - 대신 B3 + 13 나는이 글 http://office.microsoft.com/en-us/excel-help/replace-a-formula-with-its-result-HP010066258.aspx다시 계산 된 Excel 파일 저장

그것은 작동을 발견 OpenXML을

을 사용하여 파일을 열 때 셀에 2013년 4월 11일을 갖고 싶어. 나는 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(); 

그래서 무엇이 문제인가? 왜 "2013-04-11"대신 "= DY3 + 1"을 볼 수 있습니까?

답변

2

이를 선택하면 그 결과 값과 수식을 덮어 쓰려면 다음 중 하나를 필요 데이터를 포함 범위는 다음 복사 위치에 값을 붙여 넣습니다

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 자체에서 선택하여 결과를 얻을 수도 있지만 코드를 통해 그룹화 된 시트로 작업 할 때 몇 가지 문제가있었습니다.

+0

Interop을 사용하여 모든 시트를 반복적으로 만드는 방법은 무엇입니까? OpenXML에서이 작업을 수행하는 방법 만 알고 있습니다. –

+0

통합 문서 개체의 이름이 "doc"인 경우 foreach 루프를 반복하여 응답을 업데이트했습니다. –

+1

우수 :) 작동 :) 감사합니다 :) targetRange.PasteSpecial (..) 붙여 넣기 (..) –

0

수식을 계산하면 수식과 그 결과가 모두 유지됩니다. 그 값에 값을 설정 -
가 : Range.Value2 = Range.value2
또는 복사 및 붙여 넣기 - 특수 값