목차(목차) Word 문서의 문서에 포함된 내용에 대한 개요를 제공합니다. 또한 문서의 특정 섹션으로 이동할 수 있습니다. 이 기사에서는 C#을 사용하여 프로그래밍 방식으로 Word 문서의 목차를 사용하는 방법을 배웁니다. 특히 이 문서에서는 Word 문서에서 목차를 추가, 추출, 업데이트 또는 제거하는 방법을 다룹니다.

Word 문서에서 TOC 작업을 위한 C# API

Word 문서의 목차로 작업하기 위해 Aspose.Words for .NET을 사용합니다. 해당 API는 .NET 응용 프로그램 내에서 기본 및 고급 Word 자동화 기능을 수행하도록 설계되었습니다. 또한 Word 문서의 목차 조작에 대한 확실한 그립을 제공합니다. API를 다운로드하거나 NuGet을 사용하여 설치할 수 있습니다.

PM> Install-Package Aspose.Words

C#을 사용하여 Word 문서에 목차 추가

다음은 Aspose.Words for .NET을 사용하여 Word 문서에 목차를 추가하는 단계입니다.

다음 코드 샘플은 C#에서 Word 문서에 목차를 추가하는 방법을 보여줍니다.

// 전체 예제 및 데이터 파일을 보려면 https://github.com/aspose-words/Aspose.Words-for-.NET으로 이동하십시오.
// 문서 디렉토리의 경로입니다.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// 문서를 초기화합니다.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// 문서의 시작 부분에 목차를 삽입합니다.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");

// 새로 삽입된 목차는 처음에는 비어 있습니다.
// 문서의 필드를 업데이트하여 채워야 합니다.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);

C#을 사용하여 Word 문서에서 목차 추출

다음은 Word 문서의 목차에서 필드를 추출하는 단계입니다.

  • Document 클래스를 사용하여 Word 문서를 로드합니다.
  • Document.Range.Fields 컬렉션을 사용하여 문서의 각 Field를 반복합니다.
  • Field.Type 속성을 사용하여 필드 유형이 하이퍼링크인지 확인합니다.
  • 필드가 목차 섹션의 테이블 아래에 있는지 확인하십시오.
  • 필드의 정보를 검색하고 인쇄하십시오.

다음 코드 샘플은 C#을 사용하여 Word 문서에서 목차를 추출하는 방법을 보여줍니다.

// 문서 디렉토리의 경로입니다.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();

string fileName = "TOC.doc";
Aspose.Words.Document doc = new Aspose.Words.Document(dataDir + fileName);

foreach (Field field in doc.Range.Fields)
{
	if (field.Type.Equals(Aspose.Words.Fields.FieldType.FieldHyperlink))
	{
		FieldHyperlink hyperlink = (FieldHyperlink)field;
		if (hyperlink.SubAddress != null && hyperlink.SubAddress.StartsWith("_Toc"))
		{
			Paragraph tocItem = (Paragraph)field.Start.GetAncestor(NodeType.Paragraph);
			Console.WriteLine(tocItem.ToString(SaveFormat.Text).Trim());
			Console.WriteLine("------------------");
			if (tocItem != null)
			{
				Bookmark bm = doc.Range.Bookmarks[hyperlink.SubAddress];
				// 이 TOC 항목이 가리키는 위치를 가져옵니다.
				Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
				Console.WriteLine(pointer.ToString(SaveFormat.Text));
			}
		} // End If
	}// End If
}// End Foreach

C#을 사용하여 Word 문서의 목차 업데이트

Word 문서에 내용을 추가할 때마다 목차를 업데이트해야 합니다. 프로그래밍 방식으로 수행하려면 문서를 저장하기 전에 Document.UpdateFields() 메서드를 호출하기만 하면 됩니다.

C#을 사용하여 Word 문서에서 목차 제거

.NET용 Aspose.Words를 사용하면 Word 문서에서 목차를 제거할 수도 있습니다. 다음은 이 작업을 수행하는 단계입니다.

  • 먼저 Document 클래스를 사용하여 Word 문서를 로드합니다.
  • 배열에서 각 목차의 FieldStart 노드를 가져와서 저장합니다.
  • FieldEnd 유형의 노드(목차 끝)를 얻을 때까지 노드를 반복합니다.
  • Node.Remove() 메서드를 사용하여 노드를 제거하고 업데이트된 문서를 저장합니다.

다음 코드 샘플은 C#의 Word 문서에서 목차를 제거하는 방법을 보여줍니다.

// 전체 예제 및 데이터 파일을 보려면 https://github.com/aspose-words/Aspose.Words-for-.NET으로 이동하십시오.
public static void Run()
{
    
    // 문서 디렉토리의 경로입니다.
    string dataDir = RunExamples.GetDataDir_WorkingWithStyles();

    // 목차가 포함된 문서를 엽니다.
    Document doc = new Document(dataDir + "Document.TableOfContents.doc");

    // 문서에서 첫 번째 목차를 제거합니다.
    RemoveTableOfContents(doc, 0);

    dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
    // 출력을 저장합니다.
    doc.Save(dataDir);
    
    Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// 문서에서 지정된 목차 필드를 제거합니다.
///</summary>
///<param name="doc"> 필드를 제거할 문서입니다.</param>
///<param name="index"> 제거할 TOC의 0부터 시작하는 인덱스입니다.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
    // 빠른 액세스를 위해 문서에 TOC 필드의 FieldStart 노드를 저장합니다.
    ArrayList fieldStarts = new ArrayList();
    // 지정된 TOC 내에서 찾은 노드를 저장하는 목록입니다. 그들은 제거됩니다
    // 이 방법이 끝나면.
    ArrayList nodeList = new ArrayList();

    foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
    {
        if (start.FieldType == FieldType.FieldTOC)
        {
            // FieldTOC 유형인 모든 FieldStart를 추가합니다.
            fieldStarts.Add(start);
        }
    }

    // 전달된 인덱스에 의해 지정된 TOC가 존재하는지 확인하십시오.
    if (index > fieldStarts.Count - 1)
        throw new ArgumentOutOfRangeException("TOC index is out of range");

    bool isRemoving = true;
    // 지정된 TOC의 FieldStart를 가져옵니다.
    Node currentNode = (Node)fieldStarts[index];

    while (isRemoving)
    {
        // 이러한 노드를 저장하고 나중에 한 번에 모두 삭제하는 것이 더 안전합니다.
        nodeList.Add(currentNode);
        currentNode = currentNode.NextPreOrder(doc);

        // FieldTOC 유형의 FieldEnd 노드를 만나면 끝임을 알 수 있습니다.
        // 현재 목차 및 우리는 여기에서 멈출 수 있습니다.
        if (currentNode.NodeType == NodeType.FieldEnd)
        {
            FieldEnd fieldEnd = (FieldEnd)currentNode;
            if (fieldEnd.FieldType == FieldType.FieldTOC)
                isRemoving = false;
        }
    }

    // 지정된 TOC에서 찾은 모든 노드를 제거합니다.
    foreach (Node node in nodeList)
    {
        node.Remove();
    }
}

무료 API 라이선스 받기

평가 제한 없이 API를 사용해보고 싶다면 임시 라이선스를 무료로 받으세요.

결론

이 문서에서는 C#을 사용하여 Word 문서에서 목차로 작업하는 방법을 배웠습니다. 단계별 가이드 및 코드 샘플은 Word 문서에서 목차를 추가, 업데이트, 추출 및 제거하는 방법을 보여줍니다. 문서를 사용하여 C# Word 자동화 API에 대해 자세히 알아볼 수 있습니다. 질문이나 우려 사항이 있는 경우 포럼을 통해 문의하십시오.

또한보십시오