この記事は公開から1年以上経過しています。
.NET(C#)でEXCEL PIA(COM)でEXCELのグラフをコピーしたものに対してグラフのデータソースの変更を行うとデータ系列の書式設定が失われてしまう問題への対応。
本記事は.NETからEXCELを制御するケースでの対応ですが、EXCELを内部利用するライブラリなどでも同等の動作と考えます(未確認)。
問題
EXCELワークブックに存在するグラフを複製したものに対してChart.SetSourceData()
で異なるデータソースを設定すると、コピー前のデータ系列の書式設定が維持されない(プログラムからではなく手動で設定しても同様の結果となる)。
原因
データソースを変更すると書式設定やデータラベルがEXCEL機能によって自動的に変更される(様式によっては一見問題なく見える場合もある)。
対応
ワークブックに対してExcelのオプション
→詳細設定
→グラフ
の現在のブックでグラフのデータポイントに応じて設定されるプロパティ
をオフにするのと同様の設定をプログラムから行う。
サンプルソースコード(C#)
var excelApp = new Excel.Application() { Visible = true };
var workbook = excelApp.Workbooks.Open("foo.xlsx");
// この行を追加
workbook.ChartDataPointTrack = false;
ちなみに既存ブックではなく新規ブックを対象に設定する場合は
excelApp.ChartDataPointTrack = false;
のように指定できますが、この方法は「すべての新規ブックでグラフの…」がオフになってしまうことで他の用途でEXCELを起動した場合にも影響を与えてしまうことになるため、新規ブックの場合もブック単位で設定を適用するのが良いと考えます。
結果
グラフをコピーしてデータソースを変更しても、コピー元のグラフのデータ系列の書式が維持されている。
以上です。