Werken met documenteigenschappen
Werken met Documenteigenschappen
Deze gids laat zien hoe u de metadata van een Word-document kunt lezen en beheren — de eigenschappen die zichtbaar zijn in het Info/Eigenschappen-paneel van Word, plus eventuele door de applicatie gedefinieerde aangepaste waarden. Document.BuiltInDocumentProperties en Document.CustomDocumentProperties onthullen deze twee categorieën, die uiteindelijk beide zijn opgebouwd uit dezelfde onderliggende DocumentProperty-representatie.
Ingebouwde Documenteigenschappen
Document.BuiltInDocumentProperties retourneert een BuiltInDocumentProperties collectie die de standaardmetadata bevat die Word voor elk document bijhoudt: beschrijvende velden zoals Title, Subject, Author, Manager, Company, Category, Keywords en Comments; tijdstempels zoals CreatedTime, LastSavedTime en LastPrinted, samen met LastSavedBy en RevisionNumber; en statistieken zoals Words, Characters, CharactersWithSpaces, Lines, Paragraphs en Pages. Security geeft de beschermingsstatus van het document weer als een DocumentSecurity waarde, en Template, NameOfApplication en TotalEditingTime beschrijven de auteuromgeving. Omdat BuiltInDocumentProperties een vaste, bekende set eigenschappen is, worden individuele waarden gelezen en geschreven als gewone eigenschappen (BuiltInDocumentProperties.Author = "...") in plaats van op naam opgezocht.
Aangepaste Documenteigenschappen
Document.CustomDocumentProperties retourneert een CustomDocumentProperties collectie voor door de applicatie gedefinieerde metadata die niet deel uitmaakt van de ingebouwde set van Word. Verschillende Add(name, value) overloads maken een nieuwe eigenschap aan op basis van een naam en een getypeerde waarde (string, getal, boolean of datum, afhankelijk van de overload), en AddLinkToContent(name, linkSource) maakt een eigenschap aan waarvan de waarde gekoppeld is aan en een gemarkeerd bereik van inhoud in het document bijhoudt in plaats van een statische waarde te bevatten. Indexering op naam (bijv. properties[name]) en Contains(name) zoeken een eigenschap op, IndexOf(name) geeft de positie terug, en Remove(name)/RemoveAt(index) verwijderen er een.
Het DocumentProperty-object en gedeelde collectie-basis
Beide BuiltInDocumentProperties en CustomDocumentProperties zijn afgeleid van de abstracte DocumentPropertyCollection, die een indexer definieert op naam, GetEnumerator(), Contains(name), IndexOf(name) en Count — zodat de twee collecties op dezelfde manier worden geïnspecteerd, hoewel ingebouwde eigenschappen vaststaan en aangepaste eigenschappen open-ended zijn. Individueel heeft een DocumentProperty een Name, een niet-getypeerde Value, en een Type (een PropertyType enum-waarde: Boolean, DateTime, Double, Number, String, StringArray, ObjectArray, ByteArray of Other). IsLinkToContent en LinkSource geven aan of de eigenschap is gekoppeld aan documentinhoud in plaats van een statische waarde te bevatten (zie AddLinkToContent hierboven). Omdat Value niet-getypeerd is, biedt DocumentProperty getypeerde accessors — ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray() en ToString() — om deze als een specifiek type te lezen zonder een expliciete cast.
Documentbeveiliging
BuiltInDocumentProperties.Security rapporteert een DocumentSecurity waarde die de beschermingsstatus van het document beschrijft: None, PasswordProtected, ReadOnlyRecommended, ReadOnlyEnforced of ReadOnlyExceptAnnotations. Dit weerspiegelt de opgeslagen beschermingsmetadata van het document zoals gelezen uit de bestandeigenschappen.
Tips en best practices
- Gebruik de getypeerde accessors (
ToInt(),ToDouble(),ToDateTime(),ToBool()) opDocumentProperty.Valuein plaats van de niet-getypeerdeobjectwaarde direct te casten, omdat het onderliggende opslagtype perPropertyTypekan variëren. - Controleer
Contains(name)voordat u indexeert in een van beide eigenschapcollecties op naam (bijv.properties[name]) wanneer een eigenschap mogelijk niet bestaat, om te voorkomen dat een ontbrekende-eigenschap-case als een exceptiepoging wordt afgehandeld. - Gebruik
CustomDocumentProperties.AddLinkToContent(name, linkSource)wanneer de waarde van een aangepaste eigenschap altijd een gemarkeerd deel van het document moet weerspiegelen, in plaats van handmatig een statische aangepaste eigenschap opnieuw te synchroniseren telkens wanneer die inhoud verandert. - Beschouw
BuiltInDocumentPropertiesstatistieken (Words,Characters,Pagesen soortgelijke) als de waarden die in de metadata van het bestand zijn opgeslagen in plaats van altijd-live berekende tellingen — vernieuw ze expliciet als het document is gewijzigd sinds ze voor het laatst zijn weggeschreven. - Lees
BuiltInDocumentProperties.Securityom de verklaarde beschermingsstatus van een document te controleren voordat u beslist of verdere bescherming-gerelateerde verwerking nodig is.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
Het indexeren van een CustomDocumentProperties collectie op naam geeft niets bruikbaars terug | De eigenschap bestaat niet in dit document | Roep eerst Contains(name) aan, of voeg de eigenschap toe met de juiste Add(name, value) overload |
| Het lezen van de waarde van een aangepaste eigenschap geeft het verkeerde type | DocumentProperty.Value is ongetypeerde object; de aanroeper ging uit van een type dat niet overeenkomt met Type | Gebruik de overeenkomstige getypeerde accessor (ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) op basis van DocumentProperty.Type |
| De waarde van een gekoppelde aangepaste eigenschap lijkt verouderd | De eigenschap is gekoppeld via AddLinkToContent, en de gekoppelde inhoud is gewijzigd zonder dat het document correct is bijgewerkt | Controleer of het bladwijzerbereik linkSource nog steeds de beoogde inhoud weergeeft |
Word-statistieken (Words, Pages, enzovoort) komen niet overeen met de feitelijke huidige inhoud van het document | Ingebouwde statistieken weerspiegelen opgeslagen metadata, niet een live hertelling | Bereken opnieuw en werk de relevante BuiltInDocumentProperties-waarden bij als een actuele telling vereist is |
FAQ
Hoe lees of stel ik de auteur en titel van het document in?
Gebruik Document.BuiltInDocumentProperties.Author en .Title direct — het zijn gewone string-eigenschappen van de BuiltInDocumentProperties-collectie die bereikbaar is via Document.BuiltInDocumentProperties.
Hoe voeg ik toepassingsspecifieke metadata toe die geen standaard Word-eigenschap is?
Gebruik Document.CustomDocumentProperties.Add(name, value) met de naam en waarde van de eigenschap; de juiste overload van Add wordt geselecteerd op basis van het type van de waarde.
Wat is het verschil tussen BuiltInDocumentProperties en CustomDocumentProperties?
BuiltInDocumentProperties is de vaste set van standaard metadata-velden van Word (auteur, titel, statistieken, enzovoort), benaderd als benoemde eigenschappen. CustomDocumentProperties is een open-ended, benoemde collectie van DocumentProperty waarden voor door de applicatie gedefinieerde metadata, benaderd via naam met de indexer (bijv. properties[name]) en Contains.
Hoe lees ik een aangepaste eigenschap zonder van tevoren het exacte opgeslagen type te kennen?
Haal de DocumentProperty op door de collectie te indexeren (bijv. properties[name]), controleer de Type (een PropertyType-waarde), en gebruik de bijpassende getypeerde accessor zoals ToInt(), ToDouble(), ToDateTime() of ToBool() op de Value.
Hoe zorg ik ervoor dat een aangepaste eigenschap een stuk documentinhoud bijhoudt?
Gebruik CustomDocumentProperties.AddLinkToContent(name, linkSource), waarbij je een bladwijzernaam doorgeeft als linkSource; de waarde van de eigenschap weerspiegelt dan die bladwijzerinhoud in plaats van een statische waarde.
API Reference Samenvatting
| Klasse/Methode | Beschrijving |
|---|---|
Document.BuiltInDocumentProperties | Standaardmetadata-velden van Word (auteur, titel, statistieken, beveiliging, enzovoort) |
Document.CustomDocumentProperties | Door de applicatie gedefinieerde benoemde metadata-eigenschappen |
CustomDocumentProperties.Add(name, value) | Voeg een aangepaste eigenschap toe met een naam en een getypte waarde |
CustomDocumentProperties.AddLinkToContent(name, linkSource) | Voeg een aangepaste eigenschap toe die gekoppeld is aan gemarkeerde documentinhoud |
DocumentPropertyCollection | Gedeelde abstracte basis voor beide eigenschapcollecties |
DocumentProperty | De naam, ongetypeerde waarde en PropertyType van een enkele eigenschap |
DocumentProperty.ToInt() / ToDouble() / ToDateTime() / ToBool() | Getypeerde accessors voor de waarde van een eigenschap |
PropertyType | Enum die het waardetype van een DocumentProperty beschrijft |
DocumentSecurity | Enum die de beschermingsstatus van een document beschrijft, via BuiltInDocumentProperties.Security |