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. はじめに」) は次のようになります。 ここに画像の説明を入力

これは、データテーブルに入れる前の様子です。 ここに画像の説明を入力

これは、データテーブルに入れると次のようになります。

ここに画像の説明を入力

そこで、表示されているように見える制御文字 (\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

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 に答える
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 に答える