3

私のアプリケーションでは、スプレッドシートギアを使用して Excel ファイルを操作しています。次のコードを使用します。

//move incorrect to aux                         
incorrectLine.Select(); //select the line to be moved
wbkView.Cut();

auxLine.Select();
wbkView.Paste();

//move correct to incorrect
correctLine.Select(); //select the line to be moved
wbkView.Cut();

incorrectLine.Select();
wbkView.Paste();

//move aux to correct 
auxLine.Select(); //select the line to be moved
wbkView.Cut();

correctLine.Select();
wbkView.Paste();

ときどき次のエラーが表示されます。

Requested Clipboard operation did not succeed. 

StrackTrace を使用:

at System.Windows.Forms.Clipboard.ThrowIfFailed(Int32 hr)

ErrorCode = -2147221040

私が理解していることから、クリップボードが他のプロセスで使用されている場合に問題があるため、クリップボードを使用せずにExcelファイルから2行を切り替える別のモードが存在するかどうかを知りたい.

4

1 に答える 1

2

WorkbookView.Cut/Paste の代わりに IRange.Copy(...) メソッドを使用できる場合があります。このメソッドは、Windows クリップボードを使用せずに、SpreadsheetGear 内で内部的にコピー ルーチンを実行するため、ここに表示されているような問題を回避できます。さらに、ワークシート内を移動するために Select メソッドをすべて呼び出す必要はありません。

明らかな問題は、これがカットルーチンではなくコピールーチンであり、さまざまな点で互いに異なる動作をすることです。

  • コピーは明らかにソース範囲をそのままにします。cut は、ソース範囲から値と書式を削除します。IRange.Copy() を呼び出した後、IRange.Clear() を介してソース範囲をクリアすることで、これを回避できます。
  • さらに微妙なことに、ソース範囲に数式または名前付き範囲が含まれている場合、これらの数式および名前付き範囲内の参照は、切り取りの代わりにコピーを使用すると、異なる方法で修正される可能性があります。これは単純に Excel が機能する方法であるため、これについてできることは多くありません。SpreadsheetGear は、これらの点で Excel のリードに従います。もちろん、ソース範囲が名前付き範囲のない単純な値である場合、これは問題ではありません。

すべてをまとめると、コードは次のようになります。

// move incorrect to aux
incorrectLine.Copy(auxLine);
incorrectLine.Clear();

// move correct to incorrect
correctLine.Copy(incorrectLine);
correctLine.Clear();

// move aux to correct
auxLine.Copy(correctLine);
auxLine.Clear();
于 2011-11-17T22:12:38.517 に答える