Índice (TOC) em um documento do Word fornece uma visão geral do que um documento contém. Além disso, permite navegar para uma seção específica do documento. Neste artigo, você aprenderá a trabalhar com um índice em documentos do Word programaticamente. Particularmente, este artigo aborda como adicionar, extrair, atualizar ou remover um índice em documentos do Word em C#.
- API C# para adicionar, editar ou excluir TOC em documentos do Word
- Adicionar índice em um documento do Word
- Extrair índice de um documento do Word
- Atualizar índice em um documento do Word
- Remover índice em um documento do Word
- Obtenha uma licença de API gratuita
API C# para adicionar, editar ou excluir TOC em documentos do Word
Para trabalhar com índices em documentos do Word, usaremos Aspose.Words for .NET. A referida API foi projetada para executar recursos básicos e avançados de automação do Word a partir de aplicativos .NET. Além disso, dá-lhe um bom controle sobre a manipulação do índice em documentos do Word. Você pode baixar a API ou instalá-la usando NuGet.
PM> Install-Package Aspose.Words
Adicionar índice em um documento do Word em C#
A seguir estão as etapas para adicionar um índice ao documento do Word usando Aspose.Words for .NET.
- Crie uma instância da classe Document (no caso de carregar um documento Word existente, forneça o caminho do arquivo no construtor).
- Crie uma instância da classe DocumentBuilder e inicialize-a com o objeto Document criado anteriormente.
- Insira o índice usando o método DocumentBuilder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u").
- Atualize os campos usando o método Document.UpdateFields().
- Salve o documento do Word usando o método Document.Save(String).
O exemplo de código a seguir mostra como adicionar um sumário em um documento do Word em C#.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-words/Aspose.Words-for-.NET
// O caminho para o diretório de documentos.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Inicialize o documento.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
// Insira um índice no início do documento.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");
// O índice recém-inserido estará inicialmente vazio.
// Ele precisa ser preenchido atualizando os campos no documento.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);
C# Extrair Índice de um Documento do Word
A seguir estão as etapas para extrair campos de um índice em um documento do Word.
- Carregue o documento do Word usando a classe Document.
- Faça um loop em cada Field no documento usando a coleção Document.Range.Fields.
- Verifique se o tipo de campo é um hiperlink usando a propriedade Field.Type.
- Verifique se o campo está abaixo da seção de índice.
- Recupere as informações do campo e imprima.
O exemplo de código a seguir mostra como extrair um sumário de um documento do Word usando C#.
// O caminho para o diretório de documentos.
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];
// Obtenha o local para o qual este item de sumário está apontando
Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
Console.WriteLine(pointer.ToString(SaveFormat.Text));
}
} // End If
}// End If
}// End Foreach
Atualizar índice no documento do Word em C#
Sempre que você anexa algum conteúdo a um documento do Word, precisa atualizar o índice. Para fazer isso programaticamente, basta chamar o método Document.UpdateFields() antes de salvar o documento.
Remover índice no documento do Word em C#
Aspose.Words for .NET também permite que você remova o índice de um documento do Word. A seguir estão as etapas para realizar esta operação.
- Primeiro, carregue o documento do Word usando a classe Document.
- Obtenha e armazene os nós FieldStart de cada TOC em uma matriz.
- Faça um loop pelos nós até obter o nó do tipo FieldEnd (final do TOC).
- Remova os nós usando o método Node.Remove() e salve o documento atualizado.
O exemplo de código a seguir mostra como remover o índice de um documento do Word em C#.
// Para exemplos completos e arquivos de dados, acesse https://github.com/aspose-words/Aspose.Words-for-.NET
public static void Run()
{
// O caminho para o diretório de documentos.
string dataDir = RunExamples.GetDataDir_WorkingWithStyles();
// Abra um documento que contém um sumário.
Document doc = new Document(dataDir + "Document.TableOfContents.doc");
// Remova o primeiro índice do documento.
RemoveTableOfContents(doc, 0);
dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
// Salve a saída.
doc.Save(dataDir);
Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// Remove o campo de índice especificado do documento.
///</summary>
///<param name="doc"> O documento do qual remover o campo.</param>
///<param name="index"> O índice baseado em zero do TOC a ser removido.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
// Armazene os nós FieldStart dos campos TOC no documento para acesso rápido.
ArrayList fieldStarts = new ArrayList();
// Esta é uma lista para armazenar os nós encontrados dentro do TOC especificado. Eles serão removidos
// No final deste método.
ArrayList nodeList = new ArrayList();
foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
{
if (start.FieldType == FieldType.FieldTOC)
{
// Adicione todos os FieldStarts que são do tipo FieldTOC.
fieldStarts.Add(start);
}
}
// Certifique-se de que o TOC especificado pelo índice passado exista.
if (index > fieldStarts.Count - 1)
throw new ArgumentOutOfRangeException("TOC index is out of range");
bool isRemoving = true;
// Obtenha o FieldStart do sumário especificado.
Node currentNode = (Node)fieldStarts[index];
while (isRemoving)
{
// É mais seguro armazenar esses nós e excluí-los todos de uma vez mais tarde.
nodeList.Add(currentNode);
currentNode = currentNode.NextPreOrder(doc);
// Uma vez que encontramos um nó FieldEnd do tipo FieldTOC, sabemos que estamos no final
// Do TOC atual e podemos parar por aqui.
if (currentNode.NodeType == NodeType.FieldEnd)
{
FieldEnd fieldEnd = (FieldEnd)currentNode;
if (fieldEnd.FieldType == FieldType.FieldTOC)
isRemoving = false;
}
}
// Remova todos os nós encontrados no sumário especificado.
foreach (Node node in nodeList)
{
node.Remove();
}
}
Obtenha uma licença de API gratuita
Caso queira experimentar a API sem limitações de avaliação, você pode obter uma licença temporária gratuita.
Conclusão
Neste artigo, você aprendeu como trabalhar com um índice em um documento do Word programaticamente. O guia passo a passo e os exemplos de código mostraram como adicionar, atualizar, extrair e remover o índice de documentos do Word em C#. Você pode explorar mais sobre a API de automação do Word C# usando documentação. Caso você tenha alguma dúvida ou preocupação, entre em contato conosco através do nosso fórum.