課題
以下のコードであるシートの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 |