Sommario (TOC) in un documento di Word offre una panoramica di ciò che contiene un documento. Inoltre, ti consente di navigare in una particolare sezione del documento. In questo articolo imparerai come lavorare con un sommario nei documenti di Word a livello di codice usando C#. In particolare, questo articolo illustra come aggiungere, estrarre, aggiornare o rimuovere un sommario nei documenti di Word.

API C# per lavorare con il sommario nel documento di Word

Per lavorare con i sommari nei documenti di Word, useremo Aspose.Words for .NET. La suddetta API è progettata per eseguire funzionalità di automazione di Word di base e avanzate dall’interno delle applicazioni .NET. Inoltre, ti dà una solida presa sulla manipolazione del sommario nei documenti di Word. Puoi scaricare l’API o installarla utilizzando NuGet.

PM> Install-Package Aspose.Words

Aggiungi il sommario in un documento di Word usando C#

Di seguito sono riportati i passaggi per aggiungere un sommario al documento di Word utilizzando Aspose.Words per .NET.

Nell’esempio di codice seguente viene illustrato come aggiungere un sommario in un documento di Word in C#.

// Per esempi completi e file di dati, visitare https://github.com/aspose-words/Aspose.Words-for-.NET
// Il percorso della directory dei documenti.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Inizializza documento.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// Inserire un sommario all'inizio del documento.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");

// Il sommario appena inserito sarà inizialmente vuoto.
// Deve essere compilato aggiornando i campi nel documento.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);

Estrai il sommario da un documento di Word usando C#

Di seguito sono riportati i passaggi per estrarre i campi da un sommario in un documento di Word.

  • Carica il documento di Word usando la classe Document.
  • Scorri ogni Field nel documento usando la raccolta Document.Range.Fields.
  • Verificare se il tipo di campo è un collegamento ipertestuale utilizzando la proprietà Field.Type.
  • Controlla se il campo rientra nella tabella della sezione dei contenuti.
  • Recuperare le informazioni del campo e stamparlo.

Nell’esempio di codice seguente viene illustrato come estrarre un sommario da un documento di Word usando C#.

// Il percorso della directory dei documenti.
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];
				// Ottieni la posizione a cui punta questo oggetto TOC
				Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
				Console.WriteLine(pointer.ToString(SaveFormat.Text));
			}
		} // End If
	}// End If
}// End Foreach

Aggiorna il sommario nel documento di Word usando C#

Ogni volta che aggiungi del contenuto a un documento di Word, devi aggiornare il sommario. Per farlo a livello di codice, devi semplicemente chiamare il metodo Document.UpdateFields() prima di salvare il documento.

Rimuovere il sommario nel documento di Word usando C#

Aspose.Words per .NET consente inoltre di rimuovere il sommario da un documento di Word. Di seguito sono riportati i passaggi per eseguire questa operazione.

  • Innanzitutto, carica il documento di Word utilizzando la classe Document.
  • Ottieni e archivia i nodi FieldStart di ogni TOC in un array.
  • Passa attraverso i nodi fino a ottenere il nodo di tipo FieldEnd (fine del TOC).
  • Rimuovere i nodi utilizzando il metodo Node.Remove() e salvare il documento aggiornato.

Nell’esempio di codice seguente viene illustrato come rimuovere il sommario da un documento di Word in C#.

// Per esempi completi e file di dati, visitare https://github.com/aspose-words/Aspose.Words-for-.NET
public static void Run()
{
    
    // Il percorso della directory dei documenti.
    string dataDir = RunExamples.GetDataDir_WorkingWithStyles();

    // Aprire un documento che contiene un sommario.
    Document doc = new Document(dataDir + "Document.TableOfContents.doc");

    // Rimuovere il primo sommario dal documento.
    RemoveTableOfContents(doc, 0);

    dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
    // Salva l'output.
    doc.Save(dataDir);
    
    Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// Rimuove il campo del sommario specificato dal documento.
///</summary>
///<param name="doc"> Il documento da cui rimuovere il campo.</param>
///<param name="index"> L'indice in base zero del sommario da rimuovere.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
    // Archivia i nodi FieldStart dei campi TOC nel documento per un rapido accesso.
    ArrayList fieldStarts = new ArrayList();
    // Questo è un elenco per memorizzare i nodi trovati all'interno del TOC specificato. Saranno rimossi
    // Alla fine di questo metodo.
    ArrayList nodeList = new ArrayList();

    foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
    {
        if (start.FieldType == FieldType.FieldTOC)
        {
            // Aggiungi tutti i FieldStart di tipo FieldTOC.
            fieldStarts.Add(start);
        }
    }

    // Assicurarsi che il sommario specificato dall'indice passato esista.
    if (index > fieldStarts.Count - 1)
        throw new ArgumentOutOfRangeException("TOC index is out of range");

    bool isRemoving = true;
    // Ottieni il FieldStart del sommario specificato.
    Node currentNode = (Node)fieldStarts[index];

    while (isRemoving)
    {
        // È più sicuro archiviare questi nodi ed eliminarli tutti in una volta in un secondo momento.
        nodeList.Add(currentNode);
        currentNode = currentNode.NextPreOrder(doc);

        // Una volta che incontriamo un nodo FieldEnd di tipo FieldTOC, sappiamo di essere alla fine
        // Dell'attuale TOC e possiamo fermarci qui.
        if (currentNode.NodeType == NodeType.FieldEnd)
        {
            FieldEnd fieldEnd = (FieldEnd)currentNode;
            if (fieldEnd.FieldType == FieldType.FieldTOC)
                isRemoving = false;
        }
    }

    // Rimuovere tutti i nodi trovati nel sommario specificato.
    foreach (Node node in nodeList)
    {
        node.Remove();
    }
}

Ottieni una licenza API gratuita

Nel caso in cui desideri provare l’API senza limitazioni di valutazione, puoi ottenere una licenza temporanea gratuita.

Conclusione

In questo articolo hai imparato a lavorare con un sommario in un documento di Word usando C#. La guida dettagliata e gli esempi di codice hanno mostrato come aggiungere, aggiornare, estrarre e rimuovere il sommario dai documenti di Word. Puoi esplorare di più sull’API di automazione di C# Word utilizzando documentazione. In caso di domande o dubbi, contattaci tramite il nostro forum.

Guarda anche