C#에서 Word 작업(5) - BookMark 객체를 사용하여 Word 문서 작성

인용문


본고는 주로 Word의 책갈피 북마크를 통해 Word에 사용자 정의 데이터를 기록하는 것을 소개한다.앞의 글은 랭크 대상을 이용하여 워드를 읽고 쓰는 방법을 소개했는데 이런 방법으로 비교적 간단한 문서를 처리하면 괜찮지만 문서가 복잡하면 힘이 들지 않는다.
예를 들어 다음과 같은 문서가 있습니다.
프로그램에서 동적으로 이 데이터를 생성하고word 문서에 보충하도록 요구합니다. 이때 만약에 우리가range로 이 정보를 기입한다면 손댈 수가 없습니다.이런 문서의 격식과 조판은 모두 고정되어 있어서 우리는 템플릿이라고 할 수 있다.만약range에 따라 쓰기를 하는 사고방식에 따라range를 읽은 다음에 메모리에서 데이터를 수정하고 마지막으로 문서를 쓸 때 각 필드에 대한 포맷을 해서 레이아웃과 조작 전의 일치성을 확보해야 한다.만약 비교적 복잡한 조판에 부딪히면, 이런 방안은 거의 실현될 수 없을 것이다.
이제 책갈피 북마크를 도입해야 한다.책갈피를 통해word 문서를 작성하는 사고방식은 템플릿에 데이터를 입력해야 하는 위치에서 우리는 미리 약간의 책갈피를 작성하고 다른 우리가 상관없는 텍스트 내용에 대해서는 상관하지 않는다. 프로그램에서 우리는 먼저 책갈피를 읽고 각 책갈피에 맞추어 채우면 된다.이렇게 하는 장점은 전체 워드 문서의 조판이 사전에 잘 되어 있다는 것이다. 우리는 더 이상 그런 번거로운 격식 문제에 관심을 가질 필요가 없다.
자, 책갈피 북마크가 개발 중인 응용에 대해 단계별로 소개해 드리겠습니다.

2. 책갈피가 있는 템플릿 작성


우선, 우리가 해야 할 일은 템플릿에 책갈피를 삽입하는 것이다.템플릿 문서를 열고 데이터를 작성해야 하는 '이름' 필드에 마우스를 놓은 다음word의 '삽입' 도구막대 탭에서 책갈피 단추를 찾아 책갈피를 추가하는 인터페이스를 누르십시오.
팝업 '책갈피' 대화상자에 책갈피의 이름name을 입력하고 추가 단추를 누르십시오.
문서의 마우스 위치에 중괄호 기호가 삽입됩니다. 이것이 책갈피입니다.
만약 유사한 기호를 보지 못했다면, 다음 그림과 같이 워드 옵션 -> 고급 -> 책갈피를 표시하십시오.
다음에 우리는 나머지 세 개의 필드를 각각 책갈피에 추가할 것입니다. 책갈피 이름은 각각 xix,job,date입니다. 이렇게 하면 전체 템플릿을 설정할 수 있습니다. 다음에 프로젝트에서 템플릿을 채울 수 있습니다.
        

3. 템플릿 채우기


3.1 템플릿 문서 로드


"테스트"단추의 클릭 이벤트 처리 함수에서 우리는 먼저 app를 사용합니다.documents.add () 방식으로 문서를 엽니다. 코드는 다음과 같습니다.
  
 private void button1_Click(objectsender, EventArgs e)
        {
            Microsoft.Office.Interop.Word.Application app = newMicrosoft.Office.Interop.Word.Application();
            Documentdoc = app.Documents.Add("D:\\Test.docx");
            doc.ActiveWindow.Visible = true;
        }

이 때 만약 우리가 인터럽트 디버깅을 해서 불러온 doc 대상을 보면, 우리가 만든 책갈피가 성공적으로 가져왔음을 알 수 있습니다. 다음에 우리는 책갈피를 옮겨다니며 관련 작업을 할 수 있습니다.

3.2 책갈피 채우기 반복


Document 객체의 Bookmarks는 모든 책갈피 Bookmark의 집합입니다.foreach로 순환한 다음 각 Bookmark의range 속성을 호출하여 range를 통해 데이터를 기록할 수 있습니다.
       
  private void button1_Click(object sender, EventArgs e) 
	{
            Microsoft.Office.Interop.Word.Application app = newMicrosoft.Office.Interop.Word.Application();
            stringversion = app.Version;
            Console.WriteLine(version);
            Documentdoc = app.Documents.Add("D:\\Test.docx");
            doc.ActiveWindow.Visible = true;
            foreach(Bookmark bk indoc.Bookmarks)
            {
                bk.Range.Text =GetStrByBookmarkName(bk.Name);
           }
 
        }
 
        privatestring GetStrByBookmarkName(string name)
        {
            stringstr = string.Empty;
            switch(name)
            {
                case"name":
                    str = "Hyman";
                    break;
                case"six":
                    str=" ";
                    break;
                case"job":
                    str = " ";
                    break;
                case"date":
                    str = DateTime.Now.ToString();
                    break;
            }
            returnstr;
        }

GetStrByBookmarkName 함수에 책갈피 이름으로 데이터를 가져오는 기능을 봉인했습니다. 이렇게 순환한 후에 템플릿에 관심 있는 데이터를 채우는 데 성공했습니다.
 
        
Github 위치:
https://github.com/HymanLiuTS/OfficeTestByC-
이 항목을 클론하려면 다음과 같이 하십시오.
git clone [email protected]:HymanLiuTS/OfficeTestByC-.git
이 문서의 소스 코드를 가져오려면:
git checkout L05

좋은 웹페이지 즐겨찾기