1

ワークシートからすべての Excel 数式を削除して (数式をその結果に置き換えて)、ファイルを保存する必要があります。たとえば、B3+13 の代わりに、OpenXML を使用してファイルを開くときに、セルに 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();

それで、問題は何ですか?「2013-04-11」ではなく「=DY3+1」と表示されるのはなぜですか?

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 に答える