C# 프로그램에서 워드 문서를 만들고 편집하는 방법

18029 단어 WordC#

개요



C# 프로그램에서 Microsoft Word 문서를 작성, 편집, 저장하는 방법을 살펴보았으므로 샘플 코드를 게재합니다.

준비



프로젝트에 참조를 추가해야 합니다.
솔루션 탐색기의 참조 추가에서 Microsoft.Office.Interop.Word를 추가합니다.
(항목을 찾을 수 없으면 검색 대화 상자 오른쪽 상단의 검색 막대에 "Word"라든지 넣으면 나옵니다)



샘플 코드



이하에 게재하는 것은,

와 같은 워드 파일 (out.docx) 을 실행 파일과 같은 디렉토리에 작성하기 위한 샘플 코드입니다.

코드 자체는 그리 어렵지 않다고 생각합니다.
내가 이해한 범위에서는, Document 오브젝트를 편집할 때는 Document 오브젝트로부터 여러가지 방법으로 Range 를 추출해 편집 조작을 실시하게 되어 있는 것 같습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Word;
using Word = Microsoft.Office.Interop.Word;

namespace WordSample
{
    class Program
    {
        static void Main(string[] args)
        {

            try
            {

                // Word アプリケーションオブジェクトを作成
                Word.Application word = new Word.Application();
                // Word の GUI を起動しないようにする
                word.Visible = false;

                // 新規文書を作成
                Document document = word.Documents.Add();

                // ヘッダーを編集
                editHeaderSample(ref document, 10, WdColorIndex.wdPink, "Header Area");

                // フッターを編集
                editFooterSample(ref document, 10, WdColorIndex.wdBlue, "Footer Area");

                // 見出しを追加
                addHeadingSample(ref document, "見出し");

                // パラグラフを追加
                document.Content.Paragraphs.Add();

                // テキストを追加
                addTextSample(ref document, WdColorIndex.wdGreen, "Hello, ");
                addTextSample(ref document, WdColorIndex.wdRed, "World");

                // 名前を付けて保存
                object filename = System.IO.Directory.GetCurrentDirectory() + @"\out.docx";
                document.SaveAs2(ref filename);

                // 文書を閉じる
                document.Close();
                document = null;
                word.Quit();
                word = null;

                Console.WriteLine("Document created successfully !");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }

        /// <summary>
        /// 文書のヘッダーを編集する.
        /// </summary>
        private static void editHeaderSample(ref Document document, int fontSize, WdColorIndex color, string text)
        {
            foreach (Section section in document.Sections)
            {
                //Get the header range and add the header details.
                Range headerRange = section.Headers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
                headerRange.Fields.Add(headerRange, WdFieldType.wdFieldPage);
                headerRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                headerRange.Font.ColorIndex = color;
                headerRange.Font.Size = fontSize;
                headerRange.Text = text;
            }
        }

        /// <summary>
        /// 文書のフッターを編集する.
        /// </summary>
        private static void editFooterSample(ref Document document, int fontSize, WdColorIndex color, string text)
        {
            foreach (Section wordSection in document.Sections)
            {
                //Get the footer range and add the footer details.
                Range footerRange = wordSection.Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
                footerRange.Font.ColorIndex = color;
                footerRange.Font.Size = fontSize;
                footerRange.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
                footerRange.Text = text;
            }
        }

        /// <summary>
        /// 文書に見出しを追加する.
        /// </summary>
        private static void addHeadingSample(ref Document document, string text)
        {
            Paragraph para = document.Content.Paragraphs.Add(System.Reflection.Missing.Value);
            object styleHeading1 = "見出し 1";
            para.Range.set_Style(ref styleHeading1);
            para.Range.Text = text;
            para.Range.InsertParagraphAfter();
        }

        /// <summary>
        /// 文書の末尾位置を取得する.
        /// </summary>
        /// <returns></returns>
        private static int getLastPosition(ref Document document)
        {
            return document.Content.End - 1;
        }

        /// <summary>
        /// 文書の末尾にテキストを追加する.
        /// </summary>
        private static void addTextSample(ref Document document, WdColorIndex color, string text)
        {
            int before = getLastPosition(ref document);
            Range rng = document.Range(document.Content.End - 1, document.Content.End - 1);
            rng.Text += text;
            int after = getLastPosition(ref document);

            document.Range(before, after).Font.ColorIndex = color;
        }
    }
}

좋은 웹페이지 즐겨찾기