2013-06-21 83 views
2

我不知道用Richtextbox控件玩這麼難。我試圖抓取剪貼板數據並嘗試在RichTextBox中設置。在Richtextbox中查找並遍歷表格

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

如何循環表收集或Indivisual表?我們可以從RichTextBox中找到表格數量嗎?

我的目標是找到剪貼板RTF數據中是否有任何表格,如果是,那麼檢查它們中的數據。

+0

是的,不容易。你將不得不自己檢查rtf代碼。像'\ trowd'等東西。根據我的經驗,rtf並不真正具有「表格」的概念,更像是單元格行。 – LarsTech

+0

@ LarsTech-猜想我將不得不採取一些非正統的方式。爲前。如果rtf數據有一個單詞'trowd',這意味着它肯定有一些行。 –

+0

這肯定要求你使用某種'RTF Parser',你可能想要自己搜索一個庫或者編寫一個(只需要處理Table結構)。如果你想自己寫一個,我認爲使用'Regular Expression'是解析Table結構的最佳選擇,當然你應該參考'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]; 

     } 

    }