2013-06-21 79 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]; 

     } 

    }