在我的应用程序中,我使用电子表格工具处理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文件切换两行。
答案 0 :(得分:2)
您可以使用IRange.Copy(...)方法代替WorkbookView.Cut / Paste。此方法在SpreadsheetGear内部执行复制例程,而不使用Windows剪贴板,因此可以避免任何问题,例如您在此处看到的问题。另外,您不需要所有Select方法调用来浏览工作表。
显而易见的问题是,这是一个 copy 例程,而不是 cut 例程,它们以各种方式表现不同:
总而言之,您的代码可能如下所示:
// 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();