2

単語の相互運用機能を使用して特定の改行を削除するのに問題があります。doc.Content.Textのインデックスがwordのインデックスと一致していないようです。

前の文字としてドットがないすべてのブレークを削除する必要があります。

小さなドキュメントでは機能しますが、その後の約3〜5ブレークの間、選択された範囲はページブレークではありません。誰もがrange.select(start:start、end:end)なしでこれらのブレークを削除する方法を知っているか、問題?

たとえば、私は次のテキストを持っています:

34万人の世論調査を調べた米国の調査官は、月曜日の気分は他の営業日よりも悪くないことを発見しました、金曜日を除く。((休憩))

週末に近づくにつれ、人々は幸せになり、((削除する))の概念をサポートしました。

「あの金曜日の気持ち」((休憩))

class Program
{
    static void Main(string[] args)
    {
        Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();

        word.Visible = true;

        string document = @"C:\bin\Debug\123.doc";

        if (document != null)
        {
            Document doc = word.Documents.Open(document, ReadOnly: false, Visible: true);
            doc.Activate();
            string text = doc.Content.Text;

            int index = text.IndexOf("\r");
            int deletetCount = 0;

            while(index != -1)
            {
                if (index != 0 && text[index - 1] != '.')
                {
                    int start = index + 1 - deletetCount;
                    int end = start + 1;
                    if (start >= 0 && end >= 0 && end > start)
                    {
                        Range range = doc.Range(Start: start, End: end);
                        range.Select();
                        range.Delete();
                        deletetCount++;
                    }
                }

                index = text.IndexOf("\r", index + 1);
            }
        }
    }
}
4

1 に答える 1

0

私は解決策を見つけました:

今、私はワイルドカード(正規表現)で検索と置換を使用しています

休憩を削除するためのルール:

  • 前の文字はドットまたはコロンではありません
  • テキストは太字ではありません(私の場合、太字のテキストはほとんどが見出しです)
  • 次のテキストを含む改行は削除しないでください (リスト): abc 1. 2. 3. --> リストに一致させるには、テキストに変換する必要があります (doc.ConvertNumbersToText())

.

  class Program
  {
    static void Main(string[] args)
    {
        Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();

        word.Visible = true;

        string document = @"C:\bin\Debug\1.doc";

        if (document != null)
        {
            Document doc = word.Documents.Open(document, ReadOnly: false, Visible: true);
            doc.Activate();

            object missingObject = null;

            doc.ConvertNumbersToText();

            object item = WdGoToItem.wdGoToPage;
            object whichItem = WdGoToDirection.wdGoToFirst;
            object replaceAll = WdReplace.wdReplaceAll;
            object forward = true;
            object matchWholeWord = false;
            object matchWildcards = true;
            object matchSoundsLike = false;
            object matchAllWordForms = false;
            object wrap = WdFindWrap.wdFindAsk;
            object format = true;
            object matchCase = false;
            object originalText = "([!.:])^13(?[!.])";
            object replaceText = @"\1 \2";

            doc.GoTo(ref item, ref whichItem, ref missingObject, ref missingObject);
            foreach (Range rng in doc.StoryRanges)
            {
                rng.Find.Font.Bold = 0;

                rng.Find.Execute(ref originalText, ref matchCase,
            ref matchWholeWord, ref matchWildcards, ref matchSoundsLike, ref matchAllWordForms, ref forward,
            ref wrap, ref format, ref replaceText, ref replaceAll, ref missingObject,
            ref missingObject, ref missingObject, ref missingObject);
            }

        }
    }
}
于 2012-08-21T08:59:27.153 に答える