Робота з властивостями документа
Робота з властивостями документа
Цей посібник показує, як читати та керувати метаданими документа 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. Кілька перевантажень Add(name, value) створюють нову властивість за ім’ям та типізованим значенням (рядок, число, булеве значення або дата, залежно від перевантаження), а 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: 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 | Використовуйте відповідний типізований accessor (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) з назвою та значенням властивості; відповідне перевантаження 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 | Перечислення, що описує тип значення DocumentProperty |
DocumentSecurity | Перелічення, що описує стан захисту документа, через BuiltInDocumentProperties.Security |