ทำงานกับคุณสมบัติของเอกสาร
ทำงานกับคุณสมบัติของเอกสาร
คู่มือนี้แสดงวิธีอ่านและจัดการเมตาดาต้าของเอกสาร Word — คุณสมบัติที่มองเห็นได้ในแผงข้อมูล/คุณสมบัติของ Word, รวมถึงค่าที่กำหนดโดยแอปพลิเคชันเอง Document.BuiltInDocumentProperties และ Document.CustomDocumentProperties เปิดเผยสองประเภทนี้, ทั้งสองในที่สุดสร้างขึ้นจากการแสดงผล DocumentProperty เดียวกัน.
คุณสมบัติเอกสารในตัว
Document.BuiltInDocumentProperties คืนค่า BuiltInDocumentProperties คอลเลกชันที่ครอบคลุมเมตาดาต้ามาตรฐานที่ Word ติดตามสำหรับทุกเอกสาร: ฟิลด์เชิงบรรยายเช่น Title, Subject, Author, Manager, Company, Category, Keywords และ Comments; ตัวบ่งชี้เวลาเช่น CreatedTime, LastSavedTime และ LastPrinted, พร้อมกับ LastSavedBy และ RevisionNumber; และสถิติเช่น Words, Characters, CharactersWithSpaces, Lines, Paragraphs และ Pages. Security รายงานสถานะการป้องกันของเอกสารเป็นค่า DocumentSecurity, และ Template, NameOfApplication และ TotalEditingTime อธิบายสภาพแวดล้อมการเขียน. เนื่องจาก BuiltInDocumentProperties เป็นชุดคุณสมบัติที่คงที่และทราบค่า, ค่าต่าง ๆ จะถูกอ่านและเขียนเป็นคุณสมบัติปกติ (BuiltInDocumentProperties.Author = "...") แทนการค้นหาด้วยชื่อ.
คุณสมบัติเอกสารที่กำหนดเอง
Document.CustomDocumentProperties คืนค่า CustomDocumentProperties คอลเลกชันสำหรับเมตาดาต้าที่กำหนดโดยแอปพลิเคชันซึ่งไม่ได้เป็นส่วนหนึ่งของชุดที่มาพร้อมกับ Word. การ overload หลายแบบของ Add(name, value) สร้างคุณสมบัติใหม่จากชื่อและค่าที่มีประเภท (สตริง, ตัวเลข, บูลีน, หรือวันที่, ขึ้นอยู่กับ overload), และ AddLinkToContent(name, linkSource) สร้างคุณสมบัติที่ค่าถูกเชื่อมโยงและติดตามช่วงเนื้อหาที่ถูกบุ๊กมาร์คในเอกสารแทนการถือค่าคงที่. การทำดัชนีด้วยชื่อ (เช่น properties[name]) และ Contains(name) ค้นหาคุณสมบัติ, IndexOf(name) คืนตำแหน่งของมัน, และ Remove(name)/RemoveAt(index) ลบออก.
อ็อบเจกต์ DocumentProperty และฐานคอลเลกชันที่ใช้ร่วมกัน
ทั้ง BuiltInDocumentProperties และ CustomDocumentProperties สืบทอดมาจาก DocumentPropertyCollection เชิงนามธรรม ซึ่งกำหนดตัวทำดัชนีโดยชื่อ GetEnumerator(), Contains(name), IndexOf(name) และ Count — ดังนั้นคอลเลกชันทั้งสองจึงถูกตรวจสอบในลักษณะเดียวกันแม้ว่าคุณสมบัติมาตรฐานจะคงที่และคุณสมบัติกำหนดเองจะเปิดกว้าง. โดยแต่ละ DocumentProperty มี Name, Value ที่ไม่มีประเภท, และ Type (ค่าตัวแปร PropertyType enum: Boolean, DateTime, Double, Number, String, StringArray, ObjectArray, ByteArray หรือ Other). IsLinkToContent และ LinkSource รายงานว่าคุณสมบัตินั้นเชื่อมโยงกับเนื้อหาเอกสารหรือเป็นค่าคงที่ (ดู AddLinkToContent ด้านบน). เนื่องจาก Value ไม่มีประเภท, DocumentProperty จัดให้มีตัวเข้าถึงแบบกำหนดประเภท — ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray() และ ToString() — เพื่ออ่านเป็นประเภทเฉพาะโดยไม่ต้องแคสท์โดยตรง.
ความปลอดภัยของเอกสาร
BuiltInDocumentProperties.Security รายงานค่า DocumentSecurity ที่อธิบายสถานะการป้องกันของเอกสาร: None, PasswordProtected, ReadOnlyRecommended, ReadOnlyEnforced หรือ ReadOnlyExceptAnnotations. สิ่งนี้สะท้อนเมทาดาทาการป้องกันที่จัดเก็บไว้ของเอกสารซึ่งอ่านจากคุณสมบัติของไฟล์.
เคล็ดลับและแนวปฏิบัติที่ดีที่สุด
- ใช้ตัวเข้าถึงแบบกำหนดประเภท (
ToInt(),ToDouble(),ToDateTime(),ToBool()) บนDocumentProperty.Valueแทนการแคสท์ค่าที่ไม่มีประเภทobjectโดยตรง เนื่องจากประเภทการจัดเก็บพื้นฐานอาจแตกต่างกันตามPropertyType. - ตรวจสอบ
Contains(name)ก่อนทำการเข้าถึงคอลเลกชันคุณสมบัติใด ๆ ตามชื่อ (เช่นproperties[name]) เมื่อคุณสมบัติอาจไม่มีอยู่ เพื่อหลีกเลี่ยงการจัดการกรณีคุณสมบัติหายเป็นเส้นทางข้อยกเว้น. - ใช้
CustomDocumentProperties.AddLinkToContent(name, linkSource)เมื่อค่าของคุณสมบัติกำหนดเองควรสะท้อนส่วนที่ได้ทำเครื่องหมายของเอกสารเสมอ แทนการทำซิงค์ด้วยตนเองของคุณสมบัติกำหนดเองแบบคงที่ทุกครั้งที่เนื้อหานั้นเปลี่ยนแปลง. - ปฏิบัติกับสถิติ
BuiltInDocumentProperties(Words,Characters,Pagesและที่คล้ายกัน) ว่าเป็นค่าที่จัดเก็บในเมทาดาทาของไฟล์ แทนที่จะเป็นจำนวนที่คำนวณแบบเรียลไทม์เสมอ — ให้รีเฟรชอย่างชัดเจนหากเอกสารมีการเปลี่ยนแปลงตั้งแต่ครั้งล่าสุดที่เขียนค่าเหล่านั้น. - อ่าน
BuiltInDocumentProperties.Securityเพื่อตรวจสอบสถานะการป้องกันที่ระบุของเอกสารก่อนตัดสินใจว่าต้องทำการประมวลผลเพิ่มเติมที่เกี่ยวกับการป้องกันหรือไม่.
ปัญหาที่พบบ่อย
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
การทำดัชนีคอลเลกชัน CustomDocumentProperties ตามชื่อจะได้ผลลัพธ์ที่ใช้ไม่ได้ | คุณสมบัตินี้ไม่มีอยู่ในเอกสารนี้ | เรียก Contains(name) ก่อน, หรือเพิ่มคุณสมบัติโดยใช้การโอเวอร์โหลด Add(name, value) ที่เหมาะสม |
| การอ่านค่าของคุณสมบัติกำหนดเองให้ประเภทที่ไม่ถูกต้อง | DocumentProperty.Value เป็น object ที่ไม่มีการกำหนดประเภท; ผู้เรียกสมมุติประเภทที่ไม่ตรงกับ Type | ใช้ตัวเข้าถึงแบบพิมพ์ที่สอดคล้อง (ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) ตาม DocumentProperty.Type |
| ค่าของคุณสมบัติกำหนดเองที่เชื่อมโยงดูเหมือนจะล้าสมัย | คุณสมบัตินี้ถูกเชื่อมผ่าน AddLinkToContent และเนื้อหาที่เชื่อมเปลี่ยนแปลงโดยที่เอกสารไม่ได้อัปเดตอย่างเหมาะสม | ยืนยันว่าช่วง linkSource ที่ทำบุ๊กมาร์คยังคงสะท้อนเนื้อหาที่ต้องการ |
สถิติคำ (Words, Pages เป็นต้น) ไม่ตรงกับเนื้อหาปัจจุบันของเอกสาร | สถิติในตัวสะท้อนเมทาดาทาที่เก็บไว้ ไม่ใช่การนับใหม่แบบเรียลไทม์ | คำนวณใหม่และอัปเดตค่า BuiltInDocumentProperties ที่เกี่ยวข้องหากต้องการการนับที่เป็นปัจจุบัน |
FAQ
ฉันจะอ่านหรือกำหนดผู้เขียนและชื่อเรื่องของเอกสารได้อย่างไร?
ใช้ Document.BuiltInDocumentProperties.Author และ .Title โดยตรง — พวกมันเป็นคุณสมบัติประเภทสตริงธรรมดาในคอลเลกชัน BuiltInDocumentProperties ที่เข้าถึงได้จาก Document.BuiltInDocumentProperties.
ฉันจะเพิ่มเมตาดาทาที่เฉพาะแอปพลิเคชันซึ่งไม่ใช่คุณสมบัติมาตรฐานของ Word ได้อย่างไร?
ใช้ Document.CustomDocumentProperties.Add(name, value) พร้อมกับชื่อและค่าของคุณสมบัติ; การ overload Add ที่เหมาะสมจะถูกเลือกตามประเภทของค่า.
ความแตกต่างระหว่าง BuiltInDocumentProperties กับ CustomDocumentProperties คืออะไร?
BuiltInDocumentProperties คือชุดฟิลด์เมตาดาต้ามาตรฐานที่กำหนดไว้ของ Word (ผู้เขียน, ชื่อเรื่อง, สถิติ ฯลฯ) ซึ่งเข้าถึงได้เป็นคุณสมบัติตามชื่อ. CustomDocumentProperties คือคอลเลกชันที่เปิดกว้างและตั้งชื่อของค่า DocumentProperty สำหรับเมตาดาต้าที่กำหนดโดยแอปพลิเคชัน, เข้าถึงโดยชื่อผ่านตัวดัชนี (เช่น properties[name]) และ Contains.
ฉันจะอ่านคุณสมบัติกำหนดเองโดยไม่ต้องรู้ประเภทที่จัดเก็บไว้ล่วงหน้าว่าเป็นอะไรได้อย่างไร?
ดึง DocumentProperty โดยทำดัชนีคอลเลกชัน (เช่น properties[name]), ตรวจสอบ Type ของมัน (ค่าชนิด PropertyType), แล้วใช้ตัวเข้าถึงแบบมีชนิดที่ตรงกันเช่น ToInt(), ToDouble(), ToDateTime() หรือ ToBool() บน Value ของมัน.
ฉันจะทำให้คุณสมบัติกำหนดเองติดตามส่วนหนึ่งของเนื้อหาเอกสารได้อย่างไร?
ใช้ CustomDocumentProperties.AddLinkToContent(name, linkSource), ส่งชื่อบุ๊กมาร์กเป็น linkSource; ค่าของคุณสมบัติจะสะท้อนเนื้อหาที่บุ๊กมาร์คนั้นแทนค่าคงที่.
API Reference สรุป
| คลาส/เมธอด | คำอธิบาย |
|---|---|
Document.BuiltInDocumentProperties | ฟิลด์เมตาดาต้ามาตรฐานของ Word (ผู้เขียน, ชื่อเรื่อง, สถิติ, ความปลอดภัย, ฯลฯ) |
Document.CustomDocumentProperties | คุณสมบัติเมตาดาต้าที่กำหนดโดยแอปพลิเคชัน |
CustomDocumentProperties.Add(name, value) | เพิ่มคุณสมบัติกำหนดเองจากชื่อและค่าที่ระบุประเภท |
CustomDocumentProperties.AddLinkToContent(name, linkSource) | เพิ่มคุณสมบัติกำหนดเองที่เชื่อมโยงกับเนื้อหาเอกสารที่ทำบุ๊กมาร์ก |
DocumentPropertyCollection | ฐานเชิงนามธรรมที่ใช้ร่วมกันสำหรับคอลเลกชันคุณสมบัติทั้งสอง |
DocumentProperty | ชื่อของคุณสมบัติเดียว, ค่าไม่มีการระบุประเภท, และ PropertyType |
DocumentProperty.ToInt() / ToDouble() / ToDateTime() / ToBool() | ตัวเข้าถึงที่ระบุประเภทสำหรับค่าของคุณสมบัติ |
PropertyType | Enum ที่อธิบายประเภทค่าของ DocumentProperty |
DocumentSecurity | Enum ที่อธิบายสถานะการป้องกันของเอกสาร ผ่าน BuiltInDocumentProperties.Security |