none
C#でWordの段落を操作して段落の末尾にあるスペース文字を探し出す方法がわかりません。 RRS feed

  • 質問

  • Word文書に、複数の段落(Paragraph)が存在しているときに、各段落の末尾に全角スペース文字が入っているか探し出し、探し出した全角スペースが存在する位置を、C#で記述したサンプルコードでご教示ください。 探し出した全角スペースはのちほど、こちらで編集したいと考えています。 コーディング上に「using Microsoft.Office.Interop.Word;」は記載しています。 どうぞよろしくお願いいたします。
    2018年4月15日 3:09

回答

  • こんな

    namespace ConsoleApp1
    {
        using Word = Microsoft.Office.Interop.Word;
        class Program
        {
            static void Main(string[] args)
            {
                string docpath = @"Test.docx";
                string pattern = " {1,}\r";
                
                Word.Application app = new Word.Application();
                app.Visible = true;
                Word.Documents docs = app.Documents;
                Word.Document doc= docs.Open(docpath);
    
                Word.Range range = doc.Range(0, 0);
                range.Move();
                range.Select();
                Word.Paragraphs paragraphs = doc.Paragraphs;
                foreach (Word.Paragraph p in paragraphs)
                {
                    range = p.Range;
                    Word.Find f = range.Find;
                    f.ClearFormatting();
                    f.Text = pattern;
                    f.MatchWildcards = true;
                    f.Forward = true;
                    while ( f.Execute() )
                    {
                        range.SetRange(range.Start, range.End-1);
                        range.Select();
                        System.Diagnostics.Debug.WriteLine("Found");
                    }
                    f.ReleaseComObject();
                    range.ReleaseComObject();
                    p.ReleaseComObject();
                }
    
                doc.Saved = true;
                doc.Close();
                doc.ReleaseComObject();
                docs.ReleaseComObject();
                app.Quit();
                app.ReleaseComObject();
            }
        }
    
        public static class Com
        {
            public static void ReleaseComObject(this object o)
            {
                if (o != null && System.Runtime.InteropServices.Marshal.IsComObject(o))
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
                }
            }
        }
    }
    #サンプルコードを要求するのは良くない

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク inoshishiboa 2018年4月15日 6:00
    2018年4月15日 4:48

すべての返信

  • こんな

    namespace ConsoleApp1
    {
        using Word = Microsoft.Office.Interop.Word;
        class Program
        {
            static void Main(string[] args)
            {
                string docpath = @"Test.docx";
                string pattern = " {1,}\r";
                
                Word.Application app = new Word.Application();
                app.Visible = true;
                Word.Documents docs = app.Documents;
                Word.Document doc= docs.Open(docpath);
    
                Word.Range range = doc.Range(0, 0);
                range.Move();
                range.Select();
                Word.Paragraphs paragraphs = doc.Paragraphs;
                foreach (Word.Paragraph p in paragraphs)
                {
                    range = p.Range;
                    Word.Find f = range.Find;
                    f.ClearFormatting();
                    f.Text = pattern;
                    f.MatchWildcards = true;
                    f.Forward = true;
                    while ( f.Execute() )
                    {
                        range.SetRange(range.Start, range.End-1);
                        range.Select();
                        System.Diagnostics.Debug.WriteLine("Found");
                    }
                    f.ReleaseComObject();
                    range.ReleaseComObject();
                    p.ReleaseComObject();
                }
    
                doc.Saved = true;
                doc.Close();
                doc.ReleaseComObject();
                docs.ReleaseComObject();
                app.Quit();
                app.ReleaseComObject();
            }
        }
    
        public static class Com
        {
            public static void ReleaseComObject(this object o)
            {
                if (o != null && System.Runtime.InteropServices.Marshal.IsComObject(o))
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
                }
            }
        }
    }
    #サンプルコードを要求するのは良くない

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク inoshishiboa 2018年4月15日 6:00
    2018年4月15日 4:48
  • gekka様

    早々のご回答、まことにありがとうございました。

    知識の薄いなかで、無謀にもC#からWord文書を編集しようとした試みが、ご教示の内容で解決できました。

    ご指摘(#サンプルコードを要求するのは良くない)がありました通り、本来おこなってはいけない行為であったかと思います。 大変申し訳ありませんでした。 今後は留意しながら質問をさせていただきます。

    2018年4月15日 6:20