แทรกเอกสารที่แทนที่

การแนะนำ

สวัสดี ผู้เชี่ยวชาญด้านเอกสาร! เคยพบว่าตัวเองต้องใช้โค้ดมากจนต้องพยายามหาวิธีแทรกเอกสาร Word หนึ่งไปยังอีกเอกสารหนึ่งได้อย่างราบรื่นหรือไม่? อย่ากลัวเลย เพราะวันนี้เรากำลังดำดิ่งสู่โลกของ Aspose.Words สำหรับ .NET เพื่อให้งานนั้นเป็นเรื่องง่าย เราจะอธิบายคำแนะนำโดยละเอียดทีละขั้นตอนเกี่ยวกับวิธีการใช้ไลบรารีที่มีประสิทธิภาพนี้เพื่อแทรกเอกสาร ณ จุดเฉพาะระหว่างการดำเนินการค้นหาและแทนที่ พร้อมที่จะเป็นพ่อมด Aspose.Words แล้วหรือยัง? มาเริ่มกันเลย!

ข้อกำหนดเบื้องต้น

ก่อนที่เราจะพูดถึงโค้ด มีบางสิ่งที่คุณต้องมี:

  • Visual Studio: ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Visual Studio บนเครื่องของคุณแล้ว หากยังไม่มีก็สามารถดาวน์โหลดได้จากที่นี่.
  • Aspose.Words สำหรับ .NET: คุณจะต้องมีไลบรารี Aspose.Words คุณสามารถรับได้จากเว็บไซต์กำหนด.
  • ความรู้พื้นฐาน C#: ความเข้าใจพื้นฐานเกี่ยวกับ C# และ .NET จะช่วยให้คุณปฏิบัติตามบทช่วยสอนนี้

เอาล่ะ เพื่อไม่ให้เป็นการรบกวน เรามาทำให้มือของเราสกปรกด้วยโค้ดกันดีกว่า!

นำเข้าเนมสเปซ

ก่อนอื่น เราต้องนำเข้าเนมสเปซที่จำเป็นเพื่อทำงานกับ Aspose.Words นี่เหมือนกับการรวบรวมเครื่องมือทั้งหมดของคุณก่อนเริ่มโปรเจ็กต์ เพิ่มสิ่งเหล่านี้โดยใช้คำสั่งที่ด้านบนของไฟล์ C# ของคุณ:

using System;
using System.Text.RegularExpressions;
using Aspose.Words;
using Aspose.Words.Replacing;
using Aspose.Words.Tables;

ตอนนี้เรามีข้อกำหนดเบื้องต้นแล้ว เรามาแบ่งกระบวนการออกเป็นขั้นตอนเล็กๆ น้อยๆ กัน แต่ละขั้นตอนมีความสำคัญและจะนำเราเข้าใกล้เป้าหมายมากขึ้น

ขั้นตอนที่ 1: การตั้งค่าไดเร็กทอรีเอกสาร

ขั้นแรก เราต้องระบุไดเร็กทอรีที่เก็บเอกสารของเรา เหมือนกับการจัดเวทีก่อนการแสดงครั้งใหญ่

string dataDir = "YOUR DOCUMENT DIRECTORY";

แทนที่"YOUR DOCUMENT DIRECTORY" พร้อมเส้นทางไปยังไดเร็กทอรีของคุณ นี่คือที่ที่เอกสารของคุณจะอยู่และหายใจได้

ขั้นตอนที่ 2: โหลดเอกสารหลัก

ต่อไปเราจะโหลดเอกสารหลักที่เราต้องการแทรกเอกสารอื่นเข้าไป คิดว่านี่เป็นเวทีหลักของเราที่ทุกการกระทำจะเกิดขึ้น

Document mainDoc = new Document(dataDir + "Document insertion 1.docx");

รหัสนี้โหลดเอกสารหลักจากไดเร็กทอรีที่ระบุ

ขั้นตอนที่ 3: ตั้งค่าตัวเลือกการค้นหาและแทนที่

หากต้องการค้นหาตำแหน่งเฉพาะที่เราต้องการแทรกเอกสาร เราใช้ฟังก์ชันการค้นหาและแทนที่ ก็เหมือนกับการใช้แผนที่เพื่อค้นหาจุดที่แน่นอนสำหรับการเพิ่มใหม่ของเรา

FindReplaceOptions options = new FindReplaceOptions
{
    Direction = FindReplaceDirection.Backward,
    ReplacingCallback = new InsertDocumentAtReplaceHandler()
};

ที่นี่ เรากำลังกำหนดทิศทางย้อนกลับและระบุตัวจัดการการเรียกกลับแบบกำหนดเองที่เราจะกำหนดต่อไป

ขั้นตอนที่ 4: ดำเนินการแทนที่

ตอนนี้ เราบอกให้เอกสารหลักของเราค้นหาข้อความตัวยึดตำแหน่งที่เฉพาะเจาะจงและแทนที่ด้วยไม่มีอะไรเลย ขณะเดียวกันก็ใช้การโทรกลับแบบกำหนดเองของเราเพื่อแทรกเอกสารอื่น

mainDoc.Range.Replace(new Regex("\\[MY_DOCUMENT\\]"), "", options);
mainDoc.Save(dataDir + "CloneAndCombineDocuments.InsertDocumentAtReplace.docx");

รหัสนี้ดำเนินการค้นหาและแทนที่ จากนั้นบันทึกเอกสารที่อัปเดต

ขั้นตอนที่ 5: สร้างตัวจัดการการโทรกลับแทนที่แบบกำหนดเอง

ตัวจัดการการโทรกลับแบบกำหนดเองของเราคือจุดที่ความมหัศจรรย์เกิดขึ้น ตัวจัดการนี้จะกำหนดวิธีการแทรกเอกสารระหว่างการดำเนินการค้นหาและแทนที่

private class InsertDocumentAtReplaceHandler : IReplacingCallback
{
    ReplaceAction IReplacingCallback.Replacing(ReplacingArgs args)
    {
        Document subDoc = new Document(dataDir + "Document insertion 2.docx");

        // แทรกเอกสารหลังย่อหน้าที่มีข้อความตรงกัน
        Paragraph para = (Paragraph)args.MatchNode.ParentNode;
        InsertDocument(para, subDoc);

        // ลบย่อหน้าที่มีข้อความตรงกัน
        para.Remove();
        return ReplaceAction.Skip;
    }
}

ที่นี่ เราโหลดเอกสารที่จะแทรก จากนั้นเรียกใช้เมธอดตัวช่วยเพื่อดำเนินการแทรก

ขั้นตอนที่ 6: กำหนดวิธีการแทรกเอกสาร

ชิ้นส่วนสุดท้ายของปริศนาของเราคือวิธีการแทรกเอกสารในตำแหน่งที่ระบุ

private static void InsertDocument(Node insertionDestination, Document docToInsert)
{
	if (insertionDestination.NodeType == NodeType.Paragraph || insertionDestination.NodeType == NodeType.Table)
	{
		CompositeNode destinationParent = insertionDestination.ParentNode;

		NodeImporter importer =
			new NodeImporter(docToInsert, insertionDestination.Document, ImportFormatMode.KeepSourceFormatting);

		// วนซ้ำโหนดระดับบล็อกทั้งหมดในส่วนเนื้อหาของส่วน
		// จากนั้นโคลนและแทรกทุกโหนดที่ไม่ใช่ย่อหน้าว่างสุดท้ายของส่วน
		foreach (Section srcSection in docToInsert.Sections.OfType<Section>())
		foreach (Node srcNode in srcSection.Body)
		{
			if (srcNode.NodeType == NodeType.Paragraph)
			{
				Paragraph para = (Paragraph)srcNode;
				if (para.IsEndOfSection && !para.HasChildNodes)
					continue;
			}

			Node newNode = importer.ImportNode(srcNode, true);

			destinationParent.InsertAfter(newNode, insertionDestination);
			insertionDestination = newNode;
		}
	}
	else
	{
		throw new ArgumentException("The destination node should be either a paragraph or table.");
	}
}

วิธีนี้จะดูแลการนำเข้าโหนดจากเอกสารที่จะแทรกและวางไว้ที่จุดที่ถูกต้องในเอกสารหลัก

บทสรุป

และคุณก็ได้แล้ว! คำแนะนำที่ครอบคลุมเกี่ยวกับการแทรกเอกสารหนึ่งไปยังอีกเอกสารหนึ่งโดยใช้ Aspose.Words สำหรับ .NET ด้วยการทำตามขั้นตอนเหล่านี้ คุณสามารถทำให้งานการประกอบและการจัดการเอกสารเป็นอัตโนมัติได้อย่างง่ายดาย ไม่ว่าคุณจะสร้างระบบการจัดการเอกสารหรือเพียงต้องการปรับปรุงขั้นตอนการประมวลผลเอกสารของคุณ Aspose.Words คือผู้ช่วยที่ไว้วางใจได้ของคุณ

คำถามที่พบบ่อย

Aspose.Words สำหรับ .NET คืออะไร

Aspose.Words for .NET เป็นไลบรารีที่มีประสิทธิภาพสำหรับการจัดการเอกสาร Word โดยทางโปรแกรม ช่วยให้คุณสร้าง แก้ไข แปลง และประมวลผลเอกสาร Word ได้อย่างง่ายดาย

ฉันสามารถแทรกเอกสารหลายฉบับพร้อมกันได้หรือไม่

ได้ คุณสามารถแก้ไขตัวจัดการการเรียกกลับเพื่อจัดการกับการแทรกหลายรายการได้โดยการวนซ้ำชุดเอกสาร

มีการทดลองใช้ฟรีหรือไม่?

อย่างแน่นอน! คุณสามารถดาวน์โหลดรุ่นทดลองใช้ฟรีได้จากที่นี่.

ฉันจะรับการสนับสนุนสำหรับ Aspose.Words ได้อย่างไร

คุณสามารถรับการสนับสนุนได้โดยไปที่ฟอรั่ม Aspose.Words.

ฉันสามารถเก็บรูปแบบของเอกสารที่แทรกไว้ได้หรือไม่

ใช่NodeImporter คลาสช่วยให้คุณระบุวิธีจัดการการจัดรูปแบบเมื่อนำเข้าโหนดจากเอกสารหนึ่งไปยังอีกเอกสารหนึ่ง