通过C#将纯文本转换为纯文本?

时间:2013-07-23 15:15:35

标签: c# interop

我有一个程序可以读取Microsoft Word 2010文档,并将从每个表的第一列读取的所有文本放入数据表中。但是,生成的文本还包括特殊格式字符(通常在原始Word文档中不可见)。

有没有办法让我可以读取我读过的文字字符串并从中删除所有格式字符?

该程序非常简单,并使用Microsoft.Office.Interop.Word程序集。这是我从文档中抓取文本的主循环:

        // Loop through each table in the document, 
        // grab only text from cells in the first column
        // in each table.
        foreach (Table tb in docs.Tables)
        {
            for (int row = 1; row <= tb.Rows.Count; row++)
            {
                var cell = tb.Cell(row, 1);
                var listNumber = cell.Range.ListFormat.ListString;
                var text = listNumber + " " + cell.Range.Text;

                dt.Rows.Add(text);
            }
        }

编辑:以下是Word文档中的文字(&#34; 1.简介&#34;): enter image description here

这是放入我的数据表之前的样子: enter image description here

这就是放入数据表时的样子:

enter image description here

所以,我试图找出一种简单的方法来摆脱似乎出现的控制字符(\ r \ n,\ a,\ n等)。

编辑:这是我尝试使用的代码。我创建了一个转换字符串的新方法:

    private string ConvertToText(string rtf)
    {
        using (RichTextBox rtb = new RichTextBox())
        {
            rtb.Rtf = rtf;
            return rtb.Text;
        }
    }

当我运行该程序时,它会发生以下错误: enter image description here

此时变量rtf如下所示: enter image description here

解决方案:在将不需要的字符写入数据表之前,我修剪了它们。

        // Loop through each table in the document, 
        // grab only text from cells in the first column
        // in each table.
        foreach (Table tb in docs.Tables)
        {
            for (int row = 1; row <= tb.Rows.Count; row++)
            {
                var charsToTrim = new[] { '\r', '\a', ' ' };
                var cell = tb.Cell(row, 1);
                var listNumber = cell.Range.ListFormat.ListString;
                var text = listNumber + " " + cell.Range.Text;
                text = text.TrimEnd(charsToTrim);
                dt.Rows.Add(text);
            }
        }

4 个答案:

答案 0 :(得分:1)

为什么不试试这个:

using System;
using System.Text.RegularExpressions;

public class Example
{
    static string CleanInput(string strIn)
    {
        // Replace invalid characters with empty strings. 
        try {
           return Regex.Replace(strIn, @"[^\w\.@-]", "", 
                                RegexOptions.None, TimeSpan.FromSeconds(1.5)); 
        }
        // If we timeout when replacing invalid characters,  
        // we should return Empty. 
        catch (RegexMatchTimeoutException) {
           return String.Empty;   
        }
    }
}

这里也是一个链接。

http://msdn.microsoft.com/en-us/library/844skk0h.aspx

答案 1 :(得分:1)

我不知道您要删除的确切格式,但您可以尝试以下内容:

text = text.Where(c => !Char.IsControl(c)).ToString();

应该删除非打印字符。

答案 2 :(得分:1)

Al替代方案可能是您需要在表单中添加一个富文本框(如果您不想显示它,可以将其隐藏),当您阅读完所有数据后,只需将其分配给richtextbox即可。像

//rtfText is rich text
//rtBox is rich text box
rtBox.Rtf = rtfText;
//get simple text here.
string plainText = rtBox.Text;

答案 3 :(得分:0)

完全不同的方法是查看Open Office XML SDK 这个example应该可以帮到你。