Arbeta med dokumentegenskaper
Arbeta med dokumentegenskaper
Den här guiden visar hur du läser och hanterar en Word-dokuments metadata — egenskaperna som syns i Words Info/Egenskaper-panel, samt eventuella programdefinierade anpassade värden. Document.BuiltInDocumentProperties och Document.CustomDocumentProperties exponerar dessa två kategorier, som båda i slutändan är byggda på samma underliggande DocumentProperty representation.
Inbyggda dokumentegenskaper
Document.BuiltInDocumentProperties returnerar en BuiltInDocumentProperties samling som täcker den standardmetadata som Word spårar för varje dokument: beskrivande fält såsom Title, Subject, Author, Manager, Company, Category, Keywords och Comments; tidsstämplar såsom CreatedTime, LastSavedTime och LastPrinted, tillsammans med LastSavedBy och RevisionNumber; och statistik såsom Words, Characters, CharactersWithSpaces, Lines, Paragraphs och Pages. Security rapporterar dokumentets skyddstillstånd som ett DocumentSecurity värde, och Template, NameOfApplication och TotalEditingTime beskriver författarmiljön. Eftersom BuiltInDocumentProperties är en fast, känd uppsättning egenskaper, läses och skrivs enskilda värden som vanliga egenskaper (BuiltInDocumentProperties.Author = "...") snarare än att slås upp efter namn.
Anpassade dokumentegenskaper
Document.CustomDocumentProperties returnerar en CustomDocumentProperties samling för programdefinierad metadata som inte är en del av Words inbyggda uppsättning. Flera Add(name, value) överlagringar skapar en ny egenskap från ett namn och ett typat värde (sträng, nummer, boolean eller datum, beroende på överlagring), och AddLinkToContent(name, linkSource) skapar en egenskap vars värde är länkat till och spårar ett bokmärkt område av innehåll i dokumentet snarare än att hålla ett statiskt värde. Indexering efter namn (t.ex. properties[name]) och Contains(name) söker upp en egenskap, IndexOf(name) returnerar dess position, och Remove(name)/RemoveAt(index) tar bort en.
Objektet DocumentProperty och delad samlingsbas
Både BuiltInDocumentProperties och CustomDocumentProperties härstammar från den abstrakta DocumentPropertyCollection, som definierar en indexerare med namn, GetEnumerator(), Contains(name), IndexOf(name) och Count — så de två samlingarna inspekteras på samma sätt även om inbyggda egenskaper är fasta och anpassade egenskaper är öppna. Enskilt har en DocumentProperty en Name, en icke-typad Value och en Type (ett PropertyType enum-värde: Boolean, DateTime, Double, Number, String, StringArray, ObjectArray, ByteArray eller Other). IsLinkToContent och LinkSource rapporterar huruvida egenskapen är länkad till dokumentinnehåll snarare än att hålla ett statiskt värde (se AddLinkToContent ovan). Eftersom Value är icke-typad, tillhandahåller DocumentProperty typade åtkomstmetoder — ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray() och ToString() — för att läsa den som en specifik typ utan ett explicit kast.
Dokumentsäkerhet
BuiltInDocumentProperties.Security rapporterar ett DocumentSecurity-värde som beskriver dokumentets skyddstillstånd: None, PasswordProtected, ReadOnlyRecommended, ReadOnlyEnforced eller ReadOnlyExceptAnnotations. Detta återspeglar dokumentets lagrade skyddsmetadata som läses från filens egenskaper.
Tips och bästa praxis
- Använd de typade åtkomstmetoderna (
ToInt(),ToDouble(),ToDateTime(),ToBool()) påDocumentProperty.Valuesnarare än att kasta det icke-typadeobject-värdet direkt, eftersom den underliggande lagringstypen kan variera beroende påPropertyType. - Kontrollera
Contains(name)innan du indexerar in i någon av egenskapskollektionerna med namn (t.ex.properties[name]) när en egenskap kanske inte finns, för att undvika att hantera ett saknat-egenskap-fall som ett undantagsflöde. - Använd
CustomDocumentProperties.AddLinkToContent(name, linkSource)när ett anpassat egenskapsvärde alltid ska återspegla en bokmärkt del av dokumentet, istället för att manuellt åter-synkronisera en statisk anpassad egenskap varje gång innehållet ändras. - Behandla
BuiltInDocumentProperties-statistik (Words,Characters,Pagesoch liknande) som de värden som lagras i filens metadata snarare än ständigt levande beräknade räknare — uppdatera dem explicit om dokumentet har ändrats sedan de senast skrevs. - Läs
BuiltInDocumentProperties.Securityför att kontrollera ett dokuments deklarerade skyddstillstånd innan du beslutar om ytterligare skyddsrelaterad bearbetning behövs.
Vanliga problem
| Problem | Orsak | Åtgärd |
|---|---|---|
Indexering av en CustomDocumentProperties samling efter namn returnerar inget användbart | Egenskapen finns inte i detta dokument | Anropa Contains(name) först, eller lägg till egenskapen med den lämpliga Add(name, value) overload |
| Att läsa ett anpassat egenskapsvärde ger fel typ | DocumentProperty.Value är typfri object; anroparen antog en typ som inte matchar Type | Använd den motsvarande typade åtkomsten (ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) baserat på DocumentProperty.Type |
| Värdet för en länkad anpassad egenskap ser föråldrat ut | Egenskapen är länkad via AddLinkToContent, och det länkade innehållet ändrades utan att dokumentet uppdaterades på lämpligt sätt | Bekräfta att det bokmärkta linkSource-intervallet fortfarande återspeglar det avsedda innehållet |
Ordstatistik (Words, Pages och så vidare) matchar inte dokumentets faktiska aktuella innehåll | Inbyggd statistik visar lagrad metadata, inte en live-omräkning | Beräkna om och uppdatera de relevanta BuiltInDocumentProperties-värdena om en uppdaterad räkning krävs |
FAQ
Hur läser eller anger jag dokumentets författare och titel?
Använd Document.BuiltInDocumentProperties.Author och .Title direkt — de är vanliga strängegenskaper i BuiltInDocumentProperties-samlingen som nås från Document.BuiltInDocumentProperties.
Hur lägger jag till programspecifik metadata som inte är en standard-Word-egenskap?
Använd Document.CustomDocumentProperties.Add(name, value) med egenskapens namn och värde; den lämpliga Add-överladdningen väljs baserat på värdets typ.
Vad är skillnaden mellan BuiltInDocumentProperties och CustomDocumentProperties?
BuiltInDocumentProperties är Words fasta uppsättning av standardmetadatafält (författare, titel, statistik osv.), som nås som namngivna egenskaper. CustomDocumentProperties är en öppet definierad, namngiven samling av DocumentProperty värden för programdefinierad metadata, som nås via namn med indexeraren (t.ex. properties[name]) och Contains.
Hur läser jag en anpassad egenskap utan att känna till dess exakta lagrade typ i förväg?
Hämta DocumentProperty genom att indexera samlingen (t.ex. properties[name]), kontrollera dess Type (ett PropertyType värde), och använd den matchande typade åtkomsten såsom ToInt(), ToDouble(), ToDateTime() eller ToBool() på dess Value.
Hur gör jag så att en anpassad egenskap spårar en del av dokumentets innehåll?
Använd CustomDocumentProperties.AddLinkToContent(name, linkSource) och skicka ett bokmärkesnamn som linkSource; egenskapens värde reflekterar då det bokmärkta innehållet istället för ett statiskt värde.
API Reference Sammanfattning
| Klass/Metod | Beskrivning |
|---|---|
Document.BuiltInDocumentProperties | Word’s standardmetadatafält (författare, titel, statistik, säkerhet osv.) |
Document.CustomDocumentProperties | Applikationsdefinierade namngivna metadataegenskaper |
CustomDocumentProperties.Add(name, value) | Lägg till en anpassad egenskap med ett namn och ett typat värde |
CustomDocumentProperties.AddLinkToContent(name, linkSource) | Lägg till en anpassad egenskap kopplad till bokmärkt dokumentinnehåll |
DocumentPropertyCollection | Delad abstrakt bas för båda egenskapskollektionerna |
DocumentProperty | En enskild egenskaps namn, otypat värde och PropertyType |
DocumentProperty.ToInt() / ToDouble() / ToDateTime() / ToBool() | Typade åtkomstmetoder för en egenskaps värde |
PropertyType | Enum som beskriver en DocumentPropertys värdetyp |
DocumentSecurity | Enum som beskriver ett dokuments skyddstillstånd, via BuiltInDocumentProperties.Security |