Bir Word belgesindeki İçindekiler (TOC), bir belgenin içeriğine ilişkin genel bir bakış sunar. Ayrıca, belgenin belirli bir bölümüne gitmenizi sağlar. Bu makalede, Word belgelerindeki bir içindekiler tablosuyla programlı olarak nasıl çalışılacağını öğreneceksiniz. Bu makale özellikle, C# dilindeki Word belgelerinde bir içindekiler tablosunun nasıl ekleneceğini, ayıklanacağını, güncelleneceğini veya kaldırılacağını kapsar.

Word Belgelerinde İçindekiler Eklemek, Düzenlemek veya Silmek için C# API’si

Word belgelerinde içindekiler tablosuyla çalışmak için Aspose.Words for .NET kullanacağız. Söz konusu API, .NET uygulamaları içinden temel ve gelişmiş Word otomasyon özelliklerini gerçekleştirmek için tasarlanmıştır. Ayrıca, Word belgelerindeki içindekiler tablosunun işlenmesi konusunda sağlam bir kavrayış sağlar. API’yi indirebilir veya NuGet kullanarak yükleyebilirsiniz.

PM> Install-Package Aspose.Words

C# ile Word Belgesine İçindekiler Tablosu Ekleme

Aspose.Words for .NET kullanarak Word belgesine içindekiler tablosu ekleme adımları aşağıdadır.

Aşağıdaki kod örneği, C# dilinde bir Word belgesine içindekiler tablosunun nasıl ekleneceğini gösterir.

// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-words/Aspose.Words-for-.NET adresine gidin.
// Belgeler dizininin yolu.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Belgeyi başlat.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// Belgenin başına bir içindekiler tablosu ekleyin.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");

// Yeni eklenen içindekiler tablosu başlangıçta boş olacaktır.
// Belgedeki alanlar güncellenerek doldurulması gerekir.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);

C# Bir Word Belgesinden İçindekiler Tablosunu Ayıkla

Aşağıdakiler, bir Word belgesindeki içindekiler tablosundan alanları ayıklama adımlarıdır.

  • Belge sınıfını kullanarak Word belgesini yükleyin.
  • Document.Range.Fields koleksiyonunu kullanarak belgedeki her Field içinde döngü yapın.
  • Field.Type özelliğini kullanarak alan türünün bir köprü olup olmadığını kontrol edin.
  • Alanın içindekiler bölümünün tablosunun altına gelip gelmediğini kontrol edin.
  • Alan bilgilerini alın ve yazdırın.

Aşağıdaki kod örneği, C# kullanarak bir Word belgesinden bir içindekiler tablosunun nasıl çıkarılacağını gösterir.

// Belgeler dizininin yolu.
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];
				// Bu İçindekiler Öğesinin işaret ettiği konumu al
				Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
				Console.WriteLine(pointer.ToString(SaveFormat.Text));
			}
		} // End If
	}// End If
}// End Foreach

C# ile Word Belgesindeki İçindekiler Tablosunu Güncelleme

Bir Word belgesine herhangi bir içerik eklediğinizde, içindekiler tablosunu güncellemeniz gerekir. Bunu programlı olarak yapmak için, belgeyi kaydetmeden önce Document.UpdateFields() yöntemini çağırmanız yeterlidir.

C# Word Belgesindeki İçindekiler Tablosunu Kaldırma

Aspose.Words for .NET, bir Word belgesinden içindekiler tablosunu kaldırmanıza da olanak tanır. Aşağıda bu işlemi gerçekleştirmek için adımlar verilmiştir.

  • İlk olarak, Belge sınıfını kullanarak Word belgesini yükleyin.
  • Bir dizideki her TOC’nin FieldStart düğümlerini alın ve saklayın.
  • FieldEnd (TOC’nin sonu) türündeki düğümü elde edene kadar düğümler arasında döngü yapın.
  • Node.Remove() yöntemini kullanarak düğümleri kaldırın ve güncellenen belgeyi kaydedin.

Aşağıdaki kod örneği, içindekiler tablosunun C# dilinde bir Word belgesinden nasıl kaldırılacağını gösterir.

// Eksiksiz örnekler ve veri dosyaları için lütfen https://github.com/aspose-words/Aspose.Words-for-.NET adresine gidin.
public static void Run()
{
    
    // Belgeler dizininin yolu.
    string dataDir = RunExamples.GetDataDir_WorkingWithStyles();

    // İçindekiler içeren bir belge açın.
    Document doc = new Document(dataDir + "Document.TableOfContents.doc");

    // İlk içindekiler tablosunu belgeden kaldırın.
    RemoveTableOfContents(doc, 0);

    dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
    // Çıktıyı kaydedin.
    doc.Save(dataDir);
    
    Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// Belirtilen içindekiler alanını belgeden kaldırır.
///</summary>
///<param name="doc"> Alanın kaldırılacağı belge.</param>
///<param name="index"> Kaldırılacak TOC'nin sıfır tabanlı dizini.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
    // Hızlı erişim için içindekiler alanlarının FieldStart düğümlerini belgede saklayın.
    ArrayList fieldStarts = new ArrayList();
    // Bu, belirtilen TOC içinde bulunan düğümleri depolamak için bir listedir. Kaldırılacaklar
    // Bu yöntemin sonunda.
    ArrayList nodeList = new ArrayList();

    foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
    {
        if (start.FieldType == FieldType.FieldTOC)
        {
            // FieldTOC tipindeki tüm FieldStart'ları ekleyin.
            fieldStarts.Add(start);
        }
    }

    // Geçirilen dizin tarafından belirtilen TOC'nin var olduğundan emin olun.
    if (index > fieldStarts.Count - 1)
        throw new ArgumentOutOfRangeException("TOC index is out of range");

    bool isRemoving = true;
    // Belirtilen İçindekilerin FieldStart'ını alın.
    Node currentNode = (Node)fieldStarts[index];

    while (isRemoving)
    {
        // Bu düğümleri saklamak ve daha sonra hepsini birden silmek daha güvenlidir.
        nodeList.Add(currentNode);
        currentNode = currentNode.NextPreOrder(doc);

        // FieldTOC türünde bir FieldEnd düğümüyle karşılaştığımızda, sonunda olduğumuzu anlarız
        // Mevcut TOC'nin ve burada durabiliriz.
        if (currentNode.NodeType == NodeType.FieldEnd)
        {
            FieldEnd fieldEnd = (FieldEnd)currentNode;
            if (fieldEnd.FieldType == FieldType.FieldTOC)
                isRemoving = false;
        }
    }

    // Belirtilen İçindekiler'de bulunan tüm düğümleri kaldırın.
    foreach (Node node in nodeList)
    {
        node.Remove();
    }
}

Ücretsiz API Lisansı Alın

API’yi değerlendirme sınırlamaları olmadan denemek isterseniz, ücretsiz bir geçici lisans alabilirsiniz.

Çözüm

Bu makalede, bir Word belgesindeki içindekiler tablosuyla programlı olarak nasıl çalışılacağını öğrendiniz. Adım adım kılavuz ve kod örnekleri, C# dilinde Word belgelerine içindekiler tablosunun nasıl ekleneceğini, güncelleneceğini, ayıklanacağını ve kaldırılacağını göstermiştir. Belgelemeyi kullanarak C# Word otomasyon API’si hakkında daha fazlasını keşfedebilirsiniz. Herhangi bir sorunuz veya endişeniz olması durumunda, lütfen [forumumuz] aracılığıyla bizimle iletişime geçin]21.

Ayrıca bakınız