ทำงานกับคุณสมบัติของเอกสาร

ทำงานกับคุณสมบัติของเอกสาร

ทำงานกับคุณสมบัติของเอกสาร

คู่มือนี้แสดงวิธีอ่านและจัดการเมตาดาต้าของเอกสาร 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()ตัวเข้าถึงที่ระบุประเภทสำหรับค่าของคุณสมบัติ
PropertyTypeEnum ที่อธิบายประเภทค่าของ DocumentProperty
DocumentSecurityEnum ที่อธิบายสถานะการป้องกันของเอกสาร ผ่าน BuiltInDocumentProperties.Security

ดูเพิ่มเติม

 ภาษาไทย