回答編集履歴
1
別回答にあったNPOI に再計算させてみたところ、セル参照程度であれば問題なくいけました。
answer
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
{
|
19
19
|
var file_name = "testbook.xlsx";
|
20
20
|
var book = NPOI.SS.UserModel.WorkbookFactory.Create(file_name);
|
21
|
-
// read_sample: Range("C6:G6") = R[5]C[2..5] =
|
21
|
+
// read_sample: Range("C6:G6") = R[5]C[2..5] = sample!B2..6への参照
|
22
22
|
var sheet_rs = book.GetSheet("read_sample");
|
23
23
|
// read_sampleの現在のセルの値を出力
|
24
24
|
foreach (var c in Enumerable.Range(2, 5))
|
@@ -41,22 +41,24 @@
|
|
41
41
|
// data6..10
|
42
42
|
cell.SetCellValue($"data{r + 5}");
|
43
43
|
// ----
|
44
|
-
// https://teratail.com/questions/338753
|
45
44
|
// ForceFormulaRecalculationによって、
|
46
45
|
// 「次回読み込み時に」「Excelによって」再計算が強制される模様。
|
47
46
|
// ----
|
48
|
-
sheet.ForceFormulaRecalculation = true;
|
47
|
+
// sheet.ForceFormulaRecalculation = true;
|
49
48
|
}
|
50
49
|
|
50
|
+
// NPOIに再計算させる。
|
51
|
+
book.GetCreationHelper().CreateFormulaEvaluator().EvaluateAll();
|
52
|
+
|
51
53
|
// read_sampleが保存前に更新されたか確認する。
|
52
54
|
// 期待: data6..10になって欲しいが、そのままでもよい。
|
53
|
-
// 結果:
|
55
|
+
// 結果: data6..10
|
54
56
|
foreach (var c in Enumerable.Range(2, 5))
|
55
57
|
{
|
56
58
|
var row = sheet_rs.GetRow(5) ?? sheet_rs.CreateRow(5);
|
57
59
|
var cell = row.GetCell(c) ?? row.CreateCell(c);
|
58
60
|
Console.WriteLine(cell.StringCellValue);
|
59
|
-
//
|
61
|
+
// data6 data7 data8 data9 data10
|
60
62
|
}
|
61
63
|
book.Write(save_fs);
|
62
64
|
}
|
@@ -65,13 +67,13 @@
|
|
65
67
|
|
66
68
|
// 保存されたread_sampleの現在のセルの値を出力
|
67
69
|
// 期待: data6..10になって欲しい。
|
68
|
-
// 結果:
|
70
|
+
// 結果: data6..10
|
69
71
|
foreach (var c in Enumerable.Range(2, 5))
|
70
72
|
{
|
71
73
|
var row = sheet_srs.GetRow(5) ?? sheet_srs.CreateRow(5);
|
72
74
|
var cell = row.GetCell(c) ?? row.CreateCell(c);
|
73
75
|
Console.WriteLine(cell.StringCellValue);
|
74
|
-
//
|
76
|
+
// data6 data7 data8 data9 data10
|
75
77
|
}
|
76
78
|
}
|
77
79
|
}
|