Arbeta med dokumentegenskaper

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.Value snarare än att kasta det icke-typade object-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, Pages och 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.Security för att kontrollera ett dokuments deklarerade skyddstillstånd innan du beslutar om ytterligare skyddsrelaterad bearbetning behövs.

Vanliga problem

ProblemOrsakÅtgärd
Indexering av en CustomDocumentProperties samling efter namn returnerar inget användbartEgenskapen finns inte i detta dokumentAnropa 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 typDocumentProperty.Value är typfri object; anroparen antog en typ som inte matchar TypeAnvä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 utEgenskapen är länkad via AddLinkToContent, och det länkade innehållet ändrades utan att dokumentet uppdaterades på lämpligt sättBekrä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ållInbyggd statistik visar lagrad metadata, inte en live-omräkningBerä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/MetodBeskrivning
Document.BuiltInDocumentPropertiesWord’s standardmetadatafält (författare, titel, statistik, säkerhet osv.)
Document.CustomDocumentPropertiesApplikationsdefinierade 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
DocumentPropertyCollectionDelad abstrakt bas för båda egenskapskollektionerna
DocumentPropertyEn enskild egenskaps namn, otypat värde och PropertyType
DocumentProperty.ToInt() / ToDouble() / ToDateTime() / ToBool()Typade åtkomstmetoder för en egenskaps värde
PropertyTypeEnum som beskriver en DocumentPropertys värdetyp
DocumentSecurityEnum som beskriver ett dokuments skyddstillstånd, via BuiltInDocumentProperties.Security

Se även

 Svenska