문제

내가 성취하려는 것

  • 내 앱은 몇 가지 표 형 데이터를 생성합니다
  • 사용자가 Excel을 시작하고 "붙여 넣기"를 클릭하여 데이터를 Excel에 셀로 배치 할 수 있기를 원합니다.
  • Windows는 API와 함께 사용되는 "CommaseParatedValue"라는 형식을 수락하므로 가능해 보입니다.
  • 클립 보드 작업에 RAW 텍스트를 넣지만이 형식을 사용하려고하는 것은 아닙니다.
  • 참고 : 클립 보드에서 CSV 데이터를 올바르게 검색 할 수 있습니다. 내 문제는 CSV 데이터를 클립 보드에 붙여 넣는 것입니다.

내가 시도한 것은 작동하지 않습니다

clipboard.settext ()

System.Windows.Forms.Clipboard.SetText(  
  "1,2,3,4\n5,6,7,8", 
  System.Windows.Forms.TextDataFormat.CommaSeparatedValue
  );

Clipboard.SetData ()

System.Windows.Forms.Clipboard.SetData(
  System.Windows.Forms.DataFormats.CommaSeparatedValue,
  "1,2,3,4\n5,6,7,8", 
  );

두 경우 모두 클립 보드에 무언가가 배치되지만 Excel에 붙여 넣으면 Garbarge 텍스트의 한 셀로 표시됩니다.

업데이트 1 : settext ()를 사용한 해결 방법

Bfree의 답변에서 알 수 있듯이 setText ~와 함께 TextDataFormat 해결 방법으로 사용됩니다

System.Windows.Forms.Clipboard.SetText(  
  "1\t2\t3\t4\n5\t6\t7\t8", 
  System.Windows.Forms.TextDataFormat.Text
  );

나는 이것을 시도하고 이제 엑셀과 단어로 붙여 넣는 것이 올바르게 작동한다는 것을 확인했습니다. 각각의 경우에는 평범한 텍스트 대신 셀이있는 테이블로 페이스트합니다.

CommaseParatedValue가 왜 궁금합니다 ~ 아니다 일하고 있는.

도움이 되었습니까?

해결책

.NET 프레임 워크가 있습니다 DataFormats.CommaSeparatedValue 클립 보드에서 유니 코드 텍스트. 그러나 언급했듯이 http://www.syncfusion.com/faq/windowsforms/faq_c98c.aspx#q899q, Excel은 CSV 데이터가 UTF-8 메모리 스트림 일 것으로 예상합니다 (.NET 또는 Excel이 비 호환성에 대한 오류인지 여부를 말하기는 어렵습니다).

제가 응용 프로그램에서 제시 한 솔루션은 클립 보드에 두 가지 버전의 테이블 데이터를 동시에 탭으로 연결된 텍스트와 CSV 메모리 스트림으로 배치하는 것입니다. 이를 통해 대상 응용 프로그램은 선호하는 형식으로 데이터를 얻을 수 있습니다. 메모장과 Excel은 탭으로 된 텍스트를 선호하지만 Excel은 테스트 목적으로 페이스트 스페셜 ... 명령을 통해 CSV 데이터를 가져 오도록 강요 할 수 있습니다.

다음은 몇 가지 예제 코드입니다 (WPF 네임 스페이스의 Winforms-Equivalents는 여기에서 사용됩니다).

// Generate both tab-delimited and CSV strings.
string tabbedText = //...
string csvText = //...

// Create the container object that will hold both versions of the data.
var dataObject = new System.Windows.DataObject();

// Add tab-delimited text to the container object as is.
dataObject.SetText(tabbedText);

// Convert the CSV text to a UTF-8 byte stream before adding it to the container object.
var bytes = System.Text.Encoding.UTF8.GetBytes(csvText);
var stream = new System.IO.MemoryStream(bytes);
dataObject.SetData(System.Windows.DataFormats.CommaSeparatedValue, stream);

// Copy the container object to the clipboard.
System.Windows.Clipboard.SetDataObject(dataObject, true);

다른 팁

쉼표 대신 탭을 사용하십시오. 즉:

Clipboard.SetText("1\t2\t3\t4\t3\t2\t3\t4", TextDataFormat.Text);

방금 이것을 직접 테스트했고 그것은 나를 위해 일했습니다.

나는 t (bfree의 답변 참조)를 열 분리기로, n을 행 분리기로 사용하여 Excel로 붙여 넣은 성공을 거두었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top