2013-06-21 7 views
2

리치 텍스트 상자 컨트롤로 재생하는 것이 어려울지 몰랐습니다. 클립 보드 데이터를 가져 와서 RichTextBox에서 설정하려고합니다. 리치 텍스트 상자에서 테이블 찾기 및 반복

RichTextBox rtb = new RichTextBox(); 
rtb.Rtf = Clipboard.GetText(TextDataFormat.Rtf); 

어떻게 표 수집 이상 또는 직관 개별 테이블을 반복하는? RichTextBox에서 테이블 수를 찾을 수 있습니까?

제 목표는 클립 보드 RTF 데이터에 테이블이 있는지 찾아 보는 것입니다. 그렇다면 표에있는 데이터를 확인하십시오.

+0

그래 쉽지 않습니다. rtf 코드 자체를 검사해야합니다. '\ trowd' 같은 것들. 내 경험에 의하면, rtf는 실제로 "테이블"이라는 개념을 가지고 있지 않다. – LarsTech

+0

@ LarsTech- 나는 정통적 인 방법으로 가야 할 것 같아요. 예를 들면. rtf 데이터에 'trowd'라는 단어가 있으면 그 행에 확실히 일부 행이 있음을 의미합니다. –

+0

이것은 반드시 어떤 종류의'RTF Parser '로 작업 할 것을 요구합니다. 라이브러리를 검색하거나 테이블 구조로 처리하기를 원할 수도 있습니다. 혹시 독자가 직접 쓰고 싶다면, '정규식'을 사용하는 것이 테이블 구조를 파싱하는 최선의 선택이라고 생각합니다. 물론 RTF 구조에 대한 일부 문서를 참조해야합니다. 특히 테이블에 대한 구문을 알아야합니다. 나는 이것이 쉽지는 않다고 생각하지만, 매우 흥미로울 것이다. :) –

답변

0

비록이 질문에 답하기에는 너무 늦었습니다. 나는 또한 동일한 요구 사항에 걸쳐왔다.이 방법은 내가 진행 :

private static void findTableinRtf(string rtf) 
    { 
     var flowDocument = new FlowDocument(); 
     var textRange = new TextRange(flowDocument.ContentStart, flowDocument.ContentEnd); 
     using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(rtf))) 
     { 
      textRange.Load(ms, DataFormats.Rtf); 
     } 
     var blocks = flowDocument.Blocks; 
     foreach (var block in flowDocument.Blocks) 
     { 
      switch (block) 
      { 
       case List list: 
        //implement List; 
        break; 

       case Table table: 
        workWithTable(table); 
        break; 

       case Paragraph paragraph: 
        convertParagraph(paragraph); 
        break; 
       case Section section: 
        convertSection(section); 
        break; 

      } 
     } 

    } 
    private static void workWithTable(Table rtfTable) 
    { 
     TableColumnCollection columns = rtfTable.Columns; 
     TableRowGroupCollection rowGroups = rtfTable.RowGroups; 
     foreach (var row in rowGroups[0].Rows) 
     { 
      //access cells 
      // row row.Cells[i]; 

     } 

    } 
관련 문제