質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

10643閲覧

NPOIを使ってExcelの値を設定したが、参照に反映されない

Yamamin

総合スコア18

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/10/09 15:15

編集2020/10/09 15:55

NPOIを使ってExcelのテンプレートファイルに値を設定しています。
あらかじめ設定したセルを参照しているところがあるのですが、反映されません。
もう一度同じ値を手で入力すると、反映されました。反映されるにはどのようにソースを変えればいいでしょうか?

1.まずテンプレートのExcelの「Sheet1」の「A1」セルに
「=Sheet2!$A$1/1000」
と入っています。

2.プログラム上から以下のようにして、「Sheet2」の「A1」セルに値を設定します。

 ``` IWorkbook wb = WorkbookFactory.Create(ExcelFilePath);
ISheet ws = wb.GetSheet("Sheet2");

IRow row = null;
ICell cell = null;

row = ws.GetRow(0);
cell = row.GetCell(0) ?? row.CreateCell(0);
cell.SetCellValue(20000);

using (System.IO.FileStream f = new System.IO.FileStream(ExcelFilePath, System.IO.FileMode.OpenOrCreate, System.IO.FileAccess.Write))
{
wb.Write(f);
f.Close();
}

コード

3. エクセルファイルを開いて、「Sheet2」の「A1」セルには「20000」と設定   されていますが、「Sheet1」の「A1」セルを見ても0のままです。   手動で、「Sheet2」の「A1」セルに「20000」と設定しなおすと、   「Sheet1」の「A1」セルが、「20」と反映されました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

「NPOI 再計算」と検索すればよろしいかと思います。
NPOIで計算する方法とエクセルで開いた時に計算させる方法が出てくるかと思いますが
どちらも一長一短なのでそれを理解してどちらの方法を取るか決定してください。

投稿2020/10/09 23:29

YAmaGNZ

総合スコア10489

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yamamin

2020/10/10 01:51

回答ありがとうございます。「NPOI 再計算」と検索して、以下のようなコードを加えたら参照が反映されるようになりました。      if (wb is XSSFWorkbook) { XSSFFormulaEvaluator.EvaluateAllFormulaCells(wb); } else { HSSFFormulaEvaluator.EvaluateAllFormulaCells(wb); } ありがとうございました。
YAmaGNZ

2020/10/10 02:26

今回のような単純な計算式ですと問題ないのですが、合計値を求める時に範囲指定をSUM(B:B)のように列全体というようなものなど計算範囲が大きい場合ですと問題が出る可能性がありますので注意してください。
guest

0

実際に試していませんが、「ファイル」-「その他」-「オプション」のメニューで表示されるExcelのオプション設定で、「数式」にある「計算方法の設定」の「ブックの計算」が「自動」になっていないからではないでしょうか?

投稿2020/10/09 23:25

KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yamamin

2020/10/10 01:49

回答ありがとうございます。調べたところ「ブックの計算」は「自動」になっていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問