我有一个程序可以读取 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);
}
}