Posted at

エクセルを閉じるときに「図が大きすぎます。入りきらない部分は切り捨てられます。」という警告が出る

More than 1 year has passed since last update.


課題

以下のコードであるシートのRangeを別のシートにコピペしたんですが、

Globals.[コピー元シート].[名前付範囲].EntireColumn.Copy(

((Excel.Range)Cells[1, 1])
.Resize[1, [必要な列数]]);

エクセルを閉じるときに

「図が大きすぎます。入りきらない部分は切り捨てられます。」

という警告が出てうるさいです。


解決

クリップボードに大きなデータが残っているのが直接的な原因です。

コピー先を指定して Copy した場合はクリップボードを使わないのじゃないか、

という点は未確認ですが、とりあえずクリップボードをクリアしようと

Clipboard.Clear();

したのですが、クリアされず。

dobon.netさんの記事によると、

クリップボードを操作するためにはスレッドがSTA(Single Thread Apartment)である

必要があるそうです。

先の記事を参考に、STAスレッド内でClipboard.Clear()を呼び出したところ、

無事クリップボードがクリアされました。

System.Threading.Thread t = new System.Threading.Thread(()=> {

Clipboard.Clear();
});
t.SetApartmentState(System.Threading.ApartmentState.STA);
t.Start();
t.Join();


環境

アセンブリ
Version

Excel
2010

C#
4.0.0.0

Microsoft.Office.Tools
10.0.0.0


参考

クリップボードのデータの取得、設定がうまくいかないときは