web-dev-qa-db-ja.com

C#を使用してExcelに数式を追加する-数式を表示する

Excelのワークシートに数式を追加したいと思いました。
Formulaプロパティでなんとかそうすることができました。

問題は、Excelでワークシートを開くと、数式が機能することを確認できますが、結果はセルでしか確認できません。 Excelの上部にある数式バーで計算された数式が表示されません。

明らかに、Excel自体に数式を入力すると、セルに結果が表示され、数式バーに数式が表示されます。

私のコードのいくつか:

for (int i = 0; i < nOfColumns / 3; i++)
{
    Range cells = workSheet.Range[workSheet.Cells[2, i * 3 + 3], workSheet.Cells[lastRowNumber, i * 3 + 3]];
    cells.FormulaR1C1 = "=IF(EXACT(RC[-2],RC[-1]),TRUE,ABS(RC[-2]/RC[-1]-1))";
}

以下はテストコードです。ブックを保存した後でも、FormulaHiddenはfalseであり、挿入された数式を正常に取得できます。本当にイライラする

        Microsoft.Office.Interop.Excel.Application excelApp = null;
        Workbooks workBooks = null;
        Workbook workBook = null;
        Worksheet workSheet;

        try
        {

            excelApp = new Microsoft.Office.Interop.Excel.Application();
            excelApp.DisplayAlerts = false;

            workBooks = excelApp.Workbooks;
            workBook = workBooks.Open(filePath, AddToMru: false);
            workSheet = workBook.Worksheets.get_Item(1);

            int nOfColumns = workSheet.UsedRange.Columns.Count;
            int lastRowNumber = workSheet.UsedRange.Rows.Count;

            Range rng = workSheet.Range["C1"];
            rng.Formula = "=SUM(B2:B4)";
            String formula = rng.Formula; //retrieve the formula successfully

            rng.FormulaHidden = false;
            workSheet.Unprotect();

            workBook.SaveAs(filePath, AccessMode: XlSaveAsAccessMode.xlExclusive);

            formula = rng.Formula;  //retrieve the formula successfully
            bool hidden = rng.FormulaHidden;

        }
        catch (Exception e)
        {
            throw;
        }
        finally
        {
            if (workBook != null)
            {
                workBook.Close();
                workBook = null;
            }
            if (workBooks != null)
            {
                workBooks.Close();
                workBooks = null;
            }
            if (excelApp != null)
            {
                excelApp.Quit();
                excelApp = null;
            }
        }
    }

誰もが示されている式を作成する方法を知っています、プログラムで式を追加する場合

9
Amico

最後に !!!理解した。この動作は、名前を付けて保存フラグが原因で発生します。かわった

workBook.SaveAs(filePath、AccessMode:XlSaveAsAccessMode.xlExclusive);

workBook.SaveAs(filePath、AccessMode:XlSaveAsAccessMode.xlShared);

残っているのは、2つのフラグの違いを正確に理解することだけです。 :)

3
Amico

数式を非表示にし([セルの書式設定]ダイアログの[非表示]チェックボックスをオンにする)、ワークシートを保護すると(以降)、数式が数式バーに表示されなくなります。

VBAコードの例

Range("C1").FormulaHidden = True    'set this property to false to make formula visible.
Sheet1.Protect

編集:数式バーに数式を表示するには

Range("C1").FormulaHidden = False
Sheet1.Unprotect
1
shahkalpesh

ローカリゼーションは、この奇妙な動作に関係している可能性があると思います。

少し前に、Excelで作業していたときに、数式がローカライズされた言語(イタリア語を使用していた)で格納され、コンパイル時に変換されるという印象を受けました。ローカライズされた定数はスプレッドシートデータの重要な部分であるため、これは理にかなっています。

申し訳ありませんが、Excelを利用できなくなったため、正確に説明することはできませんが、スプレッドシートを英語にローカライズするか、数式テキストを現地の言語に設定してみてください。

0
CapelliC

ツールバーの[数式]タブに移動し、[数式を表示]をクリックします。

enter image description here

0
BG100