วิธีทำงานกับเอกสารใน .NET

วิธีทำงานกับเอกสารใน .NET

คู่มือนี้แสดงวิธีทำงานกับโมเดลอ็อบเจ็กต์ Document ใน Aspose.Words FOSS สำหรับ .NET: การสร้างเอกสารเปล่า, การโหลดเอกสารที่มีอยู่อย่างปลอดภัย, การสำรวจโครงสร้างส่วน/เนื้อหา, การรวมเอกสาร, และการใช้ข้อจำกัดการแก้ไข. Aspose.Words FOSS สำหรับ .NET มีให้ดาวน์โหลดผ่าน NuGet หรือโดยการสร้างจากซอร์สโค้ด.

คู่มือแบบขั้นตอนต่อขั้นตอน

ขั้นตอนที่ 1: รับไลบรารี

โคลนรีโพซิทอรีและสร้าง Aspose.Words.sln ในโหมด Release จากนั้นเพิ่มการอ้างอิงโปรเจกต์ไปยัง Aspose.Words.csproj จากโปรเจกต์ .NET ของคุณเอง คำสั่งโคลนและสร้างเต็มรูปแบบอยู่ใน คู่มือการติดตั้ง. หลังจากอ้างอิงแล้ว เพิ่ม using Aspose.Words; ที่ส่วนบนของไฟล์ใด ๆ ที่ทำงานกับเอกสาร.


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

เรียก new Document() เพื่อสร้างเอกสารเปล่า, หรือส่งเส้นทางไฟล์หรือ Stream ไปยังคอนสตรัคเตอร์ของ Document(fileName) / Document(stream) เพื่อเปิดเอกสารที่มีอยู่แล้ว การโอเวอร์โหลดที่รับอาร์กิวเมนต์ LoadOptions ให้คุณระบุรหัสผ่านสำหรับไฟล์ที่เข้ารหัส ก่อนโหลดไฟล์ที่คุณยังไม่เชื่อมั่นในรูปแบบ, เรียก FileFormatUtil.DetectFileFormat(fileName) — มันจะคืนค่า FileFormatInfo ที่รายงาน LoadFormat ที่ตรวจพบและว่าไฟล์นั้น IsEncrypted, HasDigitalSignature, หรือ HasMacros, เพื่อให้คุณสามารถปฏิเสธอินพุตที่ไม่คาดคิดก่อนที่ Document จะพยายามแยกวิเคราะห์มัน.


ขั้นตอนที่ 3: สร้างเนื้อหาด้วย DocumentBuilder

DocumentBuilder ห่อหุ้ม Document พร้อมเคอร์เซอร์ที่คุณย้ายผ่านต้นไม้ขณะแทรกเนื้อหา. Write(text) และ Writeln(text) แทรกข้อความที่เคอร์เซอร์, และ InsertParagraph() เริ่มย่อหน้าใหม่. การจัดรูปแบบที่ตั้งค่าบนคุณสมบัติ Font, ParagraphFormat, ListFormat, และ PageSetup ของตัวสร้างจะใช้กับสิ่งที่คุณเขียนต่อไป. ย้ายตำแหน่งเคอร์เซอร์ด้วย MoveToDocumentStart(), MoveToDocumentEnd(), MoveToSection(sectionIndex), MoveToBookmark(bookmarkName), หรือ MoveToParagraph(paragraphIndex, characterIndex), และอ่าน CurrentNode / CurrentParagraph / CurrentSection เพื่อยืนยันว่าตัวสร้างอยู่ตำแหน่งใด.


ขั้นตอนที่ 4: ตรวจสอบส่วนและโครงสร้างของเนื้อหา

A Document เปิดเผย SectionCollection ผ่าน Document.Sections (รวมถึง FirstSection / LastSection). แต่ละ Section มี Body เพียงหนึ่งรายการ, เนื้อหาหลักของมันเข้าถึงได้ผ่าน Body.Paragraphs (คือ ParagraphCollection) และ Body.Tables. เพื่ออ่านหรือค้นหาข้อความโดยไม่ต้องเดินผ่านโหนดด้วยตนเอง, ใช้ Range ที่มีบน Document, Section, Paragraph, และโหนดอื่น ๆ — Range.Text จะคืนข้อความธรรมดา, และ Range.Replace(pattern, replacement) ทำการค้นหาและแทนที่ที่จำกัดอยู่ในช่วงนั้นเท่านั้น.


ขั้นตอนที่ 5: รวมเอกสารสองฉบับ

เพื่อคัดลอกเอกสารทั้งหมด, เรียก Document.Clone(). เพื่อดึงเนื้อหาเฉพาะจากอินสแตนซ์ Document หนึ่งไปยังอีกอัน, เรียก ImportNode(srcNode, isImportChildren) บนเอกสารปลายทาง, หรือเรียก Document.AppendDocument(srcDoc, importFormatMode) เพื่อผนวกทุกส่วนของเอกสารต้นทางต่อท้ายเอกสารปัจจุบัน. DocumentBuilder.InsertDocument(srcDoc, importFormatMode) ทำเช่นเดียวกันแต่แทรกที่เคอร์เซอร์ของตัวสร้างแทนที่จะที่ส่วนท้าย. ในทั้งสามกรณี, เลือกค่าของ ImportFormatMode — KeepSourceFormatting, UseDestinationStyles, หรือ KeepDifferentStyles — อย่างตั้งใจ, เนื่องจากมันกำหนดว่ารูปแบบของเอกสารใดจะชนะเมื่อสองเอกสารชนกัน.


ขั้นตอนที่ 6: ใช้ข้อจำกัดการแก้ไข

เรียก Document.Protect(type, password) ด้วยค่า ProtectionType — ReadOnly, AllowOnlyComments, AllowOnlyRevisions, หรือ AllowOnlyFormFields — เพื่อจำกัดการแก้ไขที่ Word ยอมรับสำหรับเอกสารนั้น. Unprotect() (ไม่ว่าจะมีรหัสผ่านที่ตรงกันหรือไม่) จะลบข้อจำกัดออก. สิ่งนี้มีผลต่อการแก้ไขภายใน Word เท่านั้น; ไม่ได้เข้ารหัสไฟล์ที่บันทึกไว้. หากต้องการให้ต้องใช้รหัสผ่านเพื่อเปิดไฟล์เท่านั้น, ตั้งค่า OoxmlSaveOptions.Password เมื่อคุณบันทึก.

ปัญหาทั่วไปและวิธีแก้ไข

Document(fileName) จะทำให้เกิดข้อผิดพลาดสำหรับไฟล์ที่เปิดได้ปกติใน Word. รูปแบบของไฟล์ไม่เป็นหนึ่งในรูปแบบที่ตัวโหลดของรุ่นนี้สนับสนุน. เรียก FileFormatUtil.DetectFileFormat(fileName) ทำการตรวจสอบและตรวจผลลัพธ์ที่ส่งกลับ LoadFormat ก่อนพยายามโหลด.

เนื้อหาที่คัดลอกระหว่างเอกสารอาจรับแบบอักษรหรือสไตล์ที่ไม่ถูกต้อง. ส่วน ImportFormatMode ที่ส่งให้ AppendDocument or InsertDocument ไม่ตรงกับที่คุณคาดหวัง. ส่ง KeepSourceFormatting or UseDestinationStyles โดยระบุอย่างชัดเจนแทนการพึ่งพาค่าตั้งต้น.

Unprotect() ดูเหมือนจะไม่มีผล. หรือเอกสารไม่ได้รับการป้องกันด้วยรหัสผ่าน (เรียก Unprotect() โดยไม่มีอาร์กิวเมนต์), หรือรหัสผ่านที่ให้มานั้นไม่ตรงกับรหัสที่ Protect() ถูกเรียกด้วย.

รูปแบบที่ใช้ผ่าน DocumentBuilder ไม่แสดงผลตามที่คาดหวัง. รูปแบบระดับ Builder (Font, ParagraphFormat) จะใช้เฉพาะกับเนื้อหาที่เขียน after ที่ตั้งค่าไว้. ย้ายเคอร์เซอร์และตั้งค่ารูปแบบก่อนเรียก Write/Writeln, ไม่หลัง.

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

ฉันจะสร้างเอกสาร Word ใหม่ที่ว่างเปล่าได้อย่างไร?

เรียก new Document(). หุ้มด้วย DocumentBuilder เพื่อเริ่มแทรกเนื้อหาโดยทันที.

อะไรคือความแตกต่างระหว่าง Document.Clone() และ ImportNode?

Clone() คัดลอกเอกสารทั้งหมดไปยังอินสแตนซ์ใหม่ของ Document. ImportNode(srcNode, isImportChildren) นำโหนดเดียว — และโดยอาจรวมลูกโหนดของมัน — จากต้นไม้ของเอกสารหนึ่งไปยังอีกเอกสารหนึ่ง, ซึ่งเป็นสิ่งที่คุณใช้เพื่อรวมเนื้อหาเฉพาะแทนการรวมเอกสารทั้งหมด.

ฉันจะตรวจสอบรูปแบบไฟล์อย่างปลอดภัยก่อนโหลดได้อย่างไร?

เรียก FileFormatUtil.DetectFileFormat(fileName) (หรือการ overload Stream) และตรวจสอบคุณสมบัติ LoadFormat, IsEncrypted, HasDigitalSignature, และ HasMacros ของ FileFormatInfo ที่คืนค่า ก่อนนำไฟล์ไปส่งให้ Document.

ฉันจะอ่านเฉพาะย่อหน้าภายในเนื้อหาหลักของเอกสารได้อย่างไร?

ใช้คอลเลกชัน Body.Paragraphs บน Body ของส่วน, หรือ Body.GetChildNodes(nodeType, isDeep) สำหรับประเภทโหนดอื่น ๆ.

Document.Protect เข้ารหัสไฟล์ที่บันทึกไว้หรือไม่?

ไม่ — นี่คือข้อจำกัดการแก้ไขที่ Word บังคับใช้เมื่อไฟล์ถูกเปิด. เพื่อกำหนดให้ต้องใช้รหัสผ่านในการเปิดไฟล์เอง ให้ตั้งค่า OoxmlSaveOptions.Password เมื่อเรียก Document.Save.

ดูเพิ่มเติม

 ภาษาไทย