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

わんくま同盟

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

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


■103768 / )  Re[7]: OpenXML 図形
□投稿者/ 魔界の仮面弁士 (3860回)-(2025/07/11(Fri) 11:42:14)
No103767 (とくま さん) に返信
> ClosedXML は OpenXML をベースにしているから参考になる場合はある
OpenXML では SpreadsheetDocument を起点にしますが
ClosedXML では XLWorkbook を起点とするのが最大の違いですね。
(ClosedXML の XLWorkbook も、内部的で SpreadsheetDocument を呼び出しています)


> そして一般に言われる Excelライブラリ(Office Automation ライブラリ、COM API、Microsoft Excel N.N タイプ ライブラリ)
> は使ってない。

そうですね。COM 版の Excel ライブラリは使っていません。

No103755 で am さんが SaveAs(String) メソッド案を出してくださいましたが、
このメソッドは OpenXml 3.3.0 の DocumentFormat.OpenXml.Packaging.SpreadsheetDocument クラスには
存在していません。この方法で No103746 の課題を解決できるのかは、当方未検証です。

SaveAs メソッドは OpenXML 2.x に存在していた "インスタンス メソッド" ですが、
3.0.0 以降では存在していません。

2.19.0 までは使用可能でしたが
2.20.0 にて非推奨(Obsolete)に変更されたという経緯があります。
No103765 で初回した URL の末尾の「適用対象」の「バージョン (廃止)」情報を参照

su さんがお使いのバージョンはどれなのでしょうか?



一方、
 Clone() As SpreadsheetDocument
 Clone(Stream) As SpreadsheetDocument
 Clone(String) As SpreadsheetDocument
などのメソッドは 3.x 系でも使用できるようです。これらは "拡張メソッド" です。


> 大抵、引数のオーバーロードでストリームにも対応している。
SpreadsheetDocument.Open(String, Boolean) のオーバーロードの代わりに
SpreadsheetDocument.Open(Stream, Boolean) のオーバーロードを呼び出してみてください。

Open メソッドだけでなく、Create メソッドや Clone メソッドも
ファイルパス(String) を引数に受け取るオーバーロードと
ストリーム(Stream) を引数に受け取るオーバーロードを持っています。

もし、FileStream を使ってもファイルがロックされてしまうようであれば、
MemoryStream を使うようにすれば、ファイルがロックされることを防げるのではないでしょうか。
編集後に、MemoryStream の中身のバイナリをファイルに書き出す処理は必要ですが。
返信 編集キー/


管理者用

- Child Tree -