Lucrul cu proprietățile documentului
Lucrul cu proprietățile documentului
Acest ghid arată cum să citiți și să gestionați metadatele unui document Word — proprietățile vizibile în panoul Info/Properties al Word, plus orice valori personalizate definite de aplicație. Document.BuiltInDocumentProperties și Document.CustomDocumentProperties expun aceste două categorii, ambele construite în final pe aceeași reprezentare DocumentProperty de bază.
Proprietăți încorporate ale documentului
Document.BuiltInDocumentProperties returnează o colecție BuiltInDocumentProperties care acoperă metadatele standard pe care Word le urmărește pentru fiecare document: câmpuri descriptive precum Title, Subject, Author, Manager, Company, Category, Keywords și Comments; marcaje de timp precum CreatedTime, LastSavedTime și LastPrinted, alături de LastSavedBy și RevisionNumber; și statistici precum Words, Characters, CharactersWithSpaces, Lines, Paragraphs și Pages. Security raportează starea de protecție a documentului ca o valoare DocumentSecurity, iar Template, NameOfApplication și TotalEditingTime descriu mediul de creare. Deoarece BuiltInDocumentProperties este un set fix, cunoscut de proprietăți, valorile individuale sunt citite și scrise ca proprietăți obișnuite (BuiltInDocumentProperties.Author = "...") în loc să fie căutate după nume.
Proprietăți personalizate ale documentului
Document.CustomDocumentProperties returnează o colecție CustomDocumentProperties pentru metadatele definite de aplicație care nu fac parte din setul încorporat al Word. Mai multe suprasarcini Add(name, value) creează o proprietate nouă dintr-un nume și o valoare tipizată (șir, număr, boolean sau dată, în funcție de suprasarcină), iar AddLinkToContent(name, linkSource) creează o proprietate a cărei valoare este legată de și urmărește un interval de conținut marcat în document, în loc să dețină o valoare statică. Indexarea după nume (de ex. properties[name]) și Contains(name) caută o proprietate, IndexOf(name) returnează poziția acesteia, iar Remove(name)/RemoveAt(index) șterg una.
Obiectul DocumentProperty și baza colecției partajate
Atât BuiltInDocumentProperties, cât și CustomDocumentProperties derivă din abstractul DocumentPropertyCollection, care definește un indexer prin nume, GetEnumerator(), Contains(name), IndexOf(name) și Count — astfel încât cele două colecții sunt inspectate în același mod, chiar dacă proprietățile încorporate sunt fixe și proprietățile personalizate sunt deschise. Individual, un DocumentProperty are un Name, un Value netipizat și un Type (o valoare enum PropertyType: Boolean, DateTime, Double, Number, String, StringArray, ObjectArray, ByteArray sau Other). IsLinkToContent și LinkSource raportează dacă proprietatea este legată de conținutul documentului în loc să dețină o valoare statică (vezi AddLinkToContent mai sus). Deoarece Value este netipizat, DocumentProperty furnizează accesori tipizați — ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray() și ToString() — pentru a-l citi ca un tip specific fără o conversie explicită.
Securitatea documentului
BuiltInDocumentProperties.Security raportează o valoare DocumentSecurity care descrie starea de protecție a documentului: None, PasswordProtected, ReadOnlyRecommended, ReadOnlyEnforced sau ReadOnlyExceptAnnotations. Aceasta reflectă metadatele de protecție stocate ale documentului, așa cum sunt citite din proprietățile fișierului.
Sfaturi și cele mai bune practici
- Utilizați accesoriile tipizate (
ToInt(),ToDouble(),ToDateTime(),ToBool()) peDocumentProperty.Valueîn loc să convertiți direct valoarea netipizatăobject, deoarece tipul de stocare de bază poate varia în funcție dePropertyType. - Verificați
Contains(name)înainte de a indexa în oricare dintre colecțiile de proprietăți prin nume (de exempluproperties[name]) atunci când o proprietate poate să nu existe, pentru a evita tratarea unui caz de proprietate lipsă ca o cale de excepție. - Utilizați
CustomDocumentProperties.AddLinkToContent(name, linkSource)atunci când valoarea unei proprietăți personalizate ar trebui să reflecte întotdeauna o parte marcată a documentului, în loc să sincronizați manual o proprietate personalizată statică de fiecare dată când acel conținut se modifică. - Tratați statisticile
BuiltInDocumentProperties(Words,Characters,Pagesși altele similare) ca pe valorile stocate în metadatele fișierului, în loc de a le considera numărări calculate în timp real — reîmprospătați-le explicit dacă documentul s-a modificat de la ultima scriere. - Citește
BuiltInDocumentProperties.Securitypentru a verifica starea declarată de protecție a documentului înainte de a decide dacă este necesară o procesare suplimentară legată de protecție.
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
Indexarea unei colecții CustomDocumentProperties după nume nu returnează nimic utilizabil | Proprietatea nu există în acest document | Apelă Contains(name) mai întâi, sau adaugă proprietatea cu supraîncărcarea Add(name, value) corespunzătoare |
| Citirea valorii unei proprietăți personalizate dă tipul greșit | DocumentProperty.Value este un object netipizat; apelantul a presupus un tip care nu se potrivește cu Type | Utilizați accesatorul tipizat corespunzător (ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) în funcție de DocumentProperty.Type |
| Valoarea unei proprietăți personalizate legate pare învechită | Proprietatea este legată prin AddLinkToContent, iar conținutul legat s-a modificat fără ca documentul să fie actualizat corespunzător | Confirmați că intervalul linkSource marcat cu semn de carte reflectă încă conținutul dorit |
Statistica cuvintelor (Words, Pages și altele) nu corespunde conținutului actual al documentului | Statistica încorporată reflectă metadatele stocate, nu o recalculare în timp real | Recalculați și actualizați valorile relevante BuiltInDocumentProperties dacă este necesar un număr actualizat |
FAQ
Cum pot citi sau seta autorul și titlul documentului?
Folosește Document.BuiltInDocumentProperties.Author și .Title direct — sunt proprietăți obișnuite de tip șir în colecția BuiltInDocumentProperties accesată din Document.BuiltInDocumentProperties.
Cum pot adăuga metadate specifice aplicației care nu sunt o proprietate standard Word?
Folosește Document.CustomDocumentProperties.Add(name, value) cu numele și valoarea proprietății; suprasarcina Add potrivită este selectată în funcție de tipul valorii.
Care este diferența dintre BuiltInDocumentProperties și CustomDocumentProperties?
BuiltInDocumentProperties este setul fix de câmpuri standard de metadate din Word (autor, titlu, statistici etc.), accesate ca proprietăți numite. CustomDocumentProperties este o colecție deschisă, numită, de valori DocumentProperty pentru metadate definite de aplicație, accesată prin nume prin indexator (de ex. properties[name]) și Contains.
Cum pot citi o proprietate personalizată fără să cunosc în prealabil tipul său exact stocat?
Recuperați DocumentProperty prin indexarea colecției (de ex. properties[name]), verificați Type al său (o valoare PropertyType), și utilizați accesoriul tipic corespunzător, cum ar fi ToInt(), ToDouble(), ToDateTime() sau ToBool() pe Value.
Cum pot face ca o proprietate personalizată să urmărească o parte din conținutul documentului?
Utilizați CustomDocumentProperties.AddLinkToContent(name, linkSource), trecând un nume de semn de carte ca linkSource; valoarea proprietății va reflecta apoi conținutul marcat respectiv, în loc de o valoare statică.
API Reference Rezumat
| Clasă/Metodă | Descriere: |
|---|---|
Document.BuiltInDocumentProperties | Câmpurile standard de metadate ale Word (autor, titlu, statistici, securitate etc.) |
Document.CustomDocumentProperties | Proprietăți de metadate denumite, definite de aplicație |
CustomDocumentProperties.Add(name, value) | Adaugă o proprietate personalizată dintr-un nume și o valoare tipizată |
CustomDocumentProperties.AddLinkToContent(name, linkSource) | Adaugă o proprietate personalizată legată de conținutul documentului marcat cu semn de carte |
DocumentPropertyCollection | Bază abstractă comună pentru ambele colecții de proprietăți |
DocumentProperty | Numele unei singure proprietăți, valoare netipizată și PropertyType |
DocumentProperty.ToInt() / ToDouble() / ToDateTime() / ToBool() | Accesori tipizaţi pentru valoarea unei proprietăţi |
PropertyType | Enum care descrie tipul valorii unui DocumentProperty |
DocumentSecurity | Enum care descrie starea de protecție a unui document, prin BuiltInDocumentProperties.Security |