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;
}
}
}
誰もが示されている式を作成する方法を知っています、プログラムで式を追加する場合?
最後に !!!理解した。この動作は、名前を付けて保存フラグが原因で発生します。かわった
workBook.SaveAs(filePath、AccessMode:XlSaveAsAccessMode.xlExclusive);
に
workBook.SaveAs(filePath、AccessMode:XlSaveAsAccessMode.xlShared);
残っているのは、2つのフラグの違いを正確に理解することだけです。 :)
数式を非表示にし([セルの書式設定]ダイアログの[非表示]チェックボックスをオンにする)、ワークシートを保護すると(以降)、数式が数式バーに表示されなくなります。
VBAコードの例
Range("C1").FormulaHidden = True 'set this property to false to make formula visible.
Sheet1.Protect
編集:数式バーに数式を表示するには
Range("C1").FormulaHidden = False
Sheet1.Unprotect
ローカリゼーションは、この奇妙な動作に関係している可能性があると思います。
少し前に、Excelで作業していたときに、数式がローカライズされた言語(イタリア語を使用していた)で格納され、コンパイル時に変換されるという印象を受けました。ローカライズされた定数はスプレッドシートデータの重要な部分であるため、これは理にかなっています。
申し訳ありませんが、Excelを利用できなくなったため、正確に説明することはできませんが、スプレッドシートを英語にローカライズするか、数式テキストを現地の言語に設定してみてください。
ツールバーの[数式]タブに移動し、[数式を表示]をクリックします。