2011-11-17 4 views
2

내 응용 프로그램에서는 스프레드 시트를 사용하여 Excel 파일 작업을합니다. StrackTrace와클립 보드를 사용할 때 스프레드 시트 오류

Requested Clipboard operation did not succeed. 

:

//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(); 

나는 때때로 다음과 같은 오류가 나타납니다 나는 다음과 같은 코드를 사용

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

ErrorCode = -2147221040

에서 내가 클립 보드가 다른 프로세스에서 사용되는 경우 문제가 있음을 이해하므로 존재하는지 알고 싶습니다. 클립 보드를 사용하지 않고 Excel 파일에서 두 줄을 전환하는 또 다른 모드입니다.

답변

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(); 
+0

감사합니다, 당신은 내 일을 저장. – Razvan

관련 문제