C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

エクセルファイルの遠隔操作

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■94218 / inTopicNo.1)  エクセルファイルの遠隔操作
  
□投稿者/ 紅子 (1回)-(2020/03/25(Wed) 16:31:36)

分類:[.NET 全般] 

c# を使用しています。

エクセルファイルを読み込んでセル(A)のデータを変更して保存したのはいいのですが、
変更したデータのセル(A)を利用して計算式を使用しているセル(B)があります。

再度読み込んでもこの(B)は変更されません。
手動でエクセルファイルを開いてみるとセル(B)は変更されて表示されています。
プログラム上に読み込んでも変更されていません。

手動でエクセルファイルを開いてみるとセル(B)は変更されて表示されています。
これを保存します。
そして、プログラム上に読み込むとセル(B)は変更されます。

@エクセルファイルを開く
A必要があればセル(B)が存在するシートを表示する
Bファイルを保存する。
Cできれば裏で処理して表示には出ないようにしたい。

加納でしょうか?





引用返信 編集キー/
■94221 / inTopicNo.2)  Re[1]: エクセルファイルの遠隔操作
□投稿者/ 魔界の仮面弁士 (2641回)-(2020/03/25(Wed) 17:15:12)
No94218 (紅子 さん) に返信
> 加納でしょうか?
誰? (^^;


> 変更したデータのセル(A)を利用して計算式を使用しているセル(B)があります。
> 再度読み込んでもこの(B)は変更されません。

Application の Calculation プロパティが自動計算になっていますか?
https://office-hack.com/excel/formula-not-reflected/
https://www.tipsfound.com/excel/01402


また、外部データソースへのリンクを含むブックの場合、
Workbooks.Open 時に UpdateLinks を指定した方が良いかも知れません。

値   外部参照  リモート参照
―  ――――  ――――――
0   更新無し  更新無し
1   更新する  更新無し
2   更新無し  更新する
3   更新する  更新する
引用返信 編集キー/
■94229 / inTopicNo.3)  Re[2]: エクセルファイルの遠隔操作
□投稿者/ 紅子 (2回)-(2020/03/26(Thu) 10:58:33)
No94221 (魔界の仮面弁士 さん) に返信

返信ありがとうございます。
いろいろやってみましたがやはりできませんでした。

エクセルファイルを読み込んで、グリッドに表示させています。

列    G    H  I
Text   "2.55"  "1"  "2.55"
Formula  ""    ""  "G4*H4"

列Hの値を1→2に変更すると
列Iの値が 5.1 になるのですが
この処理を、グリッド上で処理しようとすると Formula を解析して計算処理しなければ
ならないため自力でするのは非常に困難(計算式が何種類もあるため)です。

1.変更されたデータをもとのエクセルファイルに上書し、
  再度読込んだ状態ではIのデータは2.55 のままでした。

2.変更されたデータをもとのエクセルファイルに上書し、
  エクセルで起動して 5.1 になっているのを確認し、
  保存せずに終了をして、  
  自作アプリで読込んだ状態ではIのデータは2.55 のままでした。

3.変更されたデータをもとのエクセルファイルに上書し、
  エクセルとして手動で起動してみてみると 5.1 になっているので、
  何もせずファイルをそのまま上書き保存しました。
  再度自作アプリで読み込むと今度は 5.1 になりました。

本来なら自作アプリのグリッドで変更された場合に計算処理ができればいいのですが
どうしてもできなかったので、外部操作(自作アプリから)によって
テンポラリファイルを作成し、ファイルを開いてエクセルで起動し、保存してから
再度自作アプリで読み込もうと考えました。

なにか他に方法がありますか?





引用返信 編集キー/
■94236 / inTopicNo.4)  Re[3]: エクセルファイルの遠隔操作
□投稿者/ Hongliang (974回)-(2020/03/26(Thu) 12:52:34)
2020/03/26(Thu) 13:39:48 編集(投稿者)

xlsxファイルの読み込みにはEPPlusかClosedXMLあたりをお使いでしょうか。

一番手っ取り早いのは、xlsxファイルの読み込みにそれらではなくExcelを参照設定してExcel.Application他のクラスを使用することです。
これであれば、セルに値を入れれば(セルを指すRangeオブジェクトのValueプロパティに値を代入すれば)、そのセルを参照しているセルの値は自動的に再計算されます。
// もちろん、再計算された値を改めて取得する必要はありますが。

<追記>
と書いたけど、ClosedXMLでも(自動)再計算やってくれるのか。どこまで対応してるのか知らないけど。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ