1

我有一个程序可以读取 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 文档中的文本(“1. Introduction”): 在此处输入图像描述

这是放入我的数据表之前的样子: 在此处输入图像描述

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

在此处输入图像描述

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

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

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

当我运行程序时,它会出现以下错误: 在此处输入图像描述

此时,变量 rtf 如下所示: 在此处输入图像描述

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

        // 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

4 回答 4

2

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

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

那应该去掉非打印字符。

于 2013-07-23T15:22:14.833 回答
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

于 2013-07-23T15:21:44.407 回答
1

另一种选择是您需要在表单中添加一个富文本框(如果您不想显示它,可以将其隐藏),当您阅读完所有数据后,只需将其分配给富文本框。喜欢

//rtfText is rich text
//rtBox is rich text box
rtBox.Rtf = rtfText;
//get simple text here.
string plainText = rtBox.Text;
于 2013-07-23T15:22:24.210 回答
0

完全不同的方法是查看Open Office XML SDK
这个例子应该让你开始。

于 2013-07-23T15:22:13.220 回答