Làm việc với Thuộc tính Tài liệu

Làm việc với Thuộc tính Tài liệu

Làm việc với Thuộc tính Tài liệu

Hướng dẫn này cho thấy cách đọc và quản lý siêu dữ liệu của tài liệu Word — các thuộc tính hiển thị trong bảng Điều khoản/Thuộc tính của Word, cộng với bất kỳ giá trị tùy chỉnh nào do ứng dụng định nghĩa. Document.BuiltInDocumentProperties và Document.CustomDocumentProperties mở ra hai danh mục này, cuối cùng đều được xây dựng trên cùng một biểu diễn DocumentProperty cơ bản.


Thuộc tính Tài liệu được tích hợp sẵn

Document.BuiltInDocumentProperties trả về một bộ sưu tập BuiltInDocumentProperties bao gồm siêu dữ liệu tiêu chuẩn mà Word theo dõi cho mỗi tài liệu: các trường mô tả như Title, Subject, Author, Manager, Company, Category, Keywords và Comments; các dấu thời gian như CreatedTime, LastSavedTime và LastPrinted, cùng với LastSavedBy và RevisionNumber; và các thống kê như Words, Characters, CharactersWithSpaces, Lines, Paragraphs và Pages. Security báo cáo trạng thái bảo vệ của tài liệu dưới dạng giá trị DocumentSecurity, và Template, NameOfApplication và TotalEditingTime mô tả môi trường biên tập. Vì BuiltInDocumentProperties là một tập hợp thuộc tính cố định, đã biết, các giá trị riêng lẻ được đọc và ghi như các thuộc tính thông thường (BuiltInDocumentProperties.Author = "...") thay vì được tra cứu theo tên.

Thuộc tính Tài liệu Tùy chỉnh

Document.CustomDocumentProperties trả về một bộ sưu tập CustomDocumentProperties cho siêu dữ liệu do ứng dụng định nghĩa mà không thuộc bộ tích hợp sẵn của Word. Một số hàm quá tải Add(name, value) tạo một thuộc tính mới từ tên và giá trị có kiểu (chuỗi, số, boolean, hoặc ngày, tùy thuộc vào hàm quá tải), và AddLinkToContent(name, linkSource) tạo một thuộc tính có giá trị được liên kết và theo dõi một đoạn nội dung được đánh dấu trong tài liệu thay vì giữ giá trị tĩnh. Việc lập chỉ mục theo tên (ví dụ properties[name]) và Contains(name) tra cứu một thuộc tính, IndexOf(name) trả về vị trí của nó, và Remove(name)/RemoveAt(index) xóa một thuộc tính.

Đối tượng DocumentProperty và Cơ sở Bộ sưu tập Chung

Cả BuiltInDocumentProperties và CustomDocumentProperties đều kế thừa từ DocumentPropertyCollection trừu tượng, định nghĩa một bộ chỉ mục theo tên, GetEnumerator(), Contains(name), IndexOf(name) và Count — vì vậy hai bộ sưu tập được kiểm tra theo cùng một cách mặc dù các thuộc tính tích hợp cố định và các thuộc tính tùy chỉnh mở rộng. Riêng lẻ, một DocumentProperty có Name, một Value không có kiểu, và một Type (một giá trị enum PropertyType: Boolean, DateTime, Double, Number, String, StringArray, ObjectArray, ByteArray, hoặc Other). IsLinkToContent và LinkSource báo cáo liệu thuộc tính có được liên kết với nội dung tài liệu thay vì giữ một giá trị tĩnh hay không (xem AddLinkToContent ở trên). Vì Value không có kiểu, DocumentProperty cung cấp các accessor có kiểu — ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray(), và ToString() — để đọc nó như một kiểu cụ thể mà không cần ép kiểu rõ ràng.

Bảo mật tài liệu

BuiltInDocumentProperties.Security báo cáo một giá trị DocumentSecurity mô tả trạng thái bảo vệ của tài liệu: None, PasswordProtected, ReadOnlyRecommended, ReadOnlyEnforced, hoặc ReadOnlyExceptAnnotations. Điều này phản ánh siêu dữ liệu bảo vệ đã lưu của tài liệu được đọc từ các thuộc tính của tệp.


Mẹo và Thực tiễn Tốt nhất

  • Sử dụng các accessor có kiểu (ToInt(), ToDouble(), ToDateTime(), ToBool()) trên DocumentProperty.Value thay vì ép kiểu trực tiếp giá trị object không có kiểu, vì loại lưu trữ nền có thể thay đổi tùy theo PropertyType.
  • Kiểm tra Contains(name) trước khi truy cập chỉ mục vào bất kỳ bộ sưu tập thuộc tính nào theo tên (ví dụ: properties[name]) khi một thuộc tính có thể không tồn tại, để tránh xử lý trường hợp thuộc tính thiếu như một đường dẫn ngoại lệ.
  • Sử dụng CustomDocumentProperties.AddLinkToContent(name, linkSource) khi giá trị của thuộc tính tùy chỉnh luôn phải phản ánh một phần được đánh dấu trong tài liệu, thay vì phải đồng bộ lại thủ công một thuộc tính tùy chỉnh tĩnh mỗi khi nội dung đó thay đổi.
  • Coi các thống kê BuiltInDocumentProperties (Words, Characters, Pages, và các tương tự) như các giá trị được lưu trong siêu dữ liệu của tệp thay vì các đếm luôn được tính toán theo thời gian thực — hãy làm mới chúng một cách rõ ràng nếu tài liệu đã thay đổi kể từ lần cuối cùng chúng được ghi.
  • Đọc BuiltInDocumentProperties.Security để kiểm tra trạng thái bảo vệ đã khai báo của tài liệu trước khi quyết định liệu có cần thực hiện các xử lý liên quan đến bảo vệ bổ sung hay không.

Các vấn đề thường gặp

Vấn đềNguyên nhânCách khắc phục
Việc đánh chỉ mục một bộ sưu tập CustomDocumentProperties theo tên không trả về kết quả nào có thể sử dụngThuộc tính không tồn tại trong tài liệu nàyGọi Contains(name) trước, hoặc thêm thuộc tính bằng overload Add(name, value) thích hợp
Đọc giá trị của thuộc tính tùy chỉnh cho ra kiểu saiDocumentProperty.Value là object không có kiểu; người gọi đã giả định một kiểu không khớp với TypeSử dụng bộ truy cập kiểu tương ứng (ToInt(), ToDouble(), ToDateTime(), ToBool(), ToByteArray()) dựa trên DocumentProperty.Type
Giá trị của thuộc tính tùy chỉnh được liên kết có vẻ lỗi thờiThuộc tính được liên kết qua AddLinkToContent, và nội dung được liên kết đã thay đổi mà tài liệu không được cập nhật một cách thích hợpXác nhận phạm vi linkSource được đánh dấu vẫn phản ánh nội dung dự định
Thống kê từ (Words, Pages, v.v.) không khớp với nội dung thực tế hiện tại của tài liệuThống kê tích hợp phản ánh siêu dữ liệu đã lưu, không phải một lần đếm lại trực tiếpTính lại và cập nhật các giá trị BuiltInDocumentProperties liên quan nếu cần một đếm số cập nhật

FAQ

Làm thế nào để đọc hoặc đặt tác giả và tiêu đề của tài liệu?

Sử dụng Document.BuiltInDocumentProperties.Author và .Title trực tiếp — chúng là các thuộc tính chuỗi thông thường trong bộ sưu tập BuiltInDocumentProperties được truy cập từ Document.BuiltInDocumentProperties.

Làm thế nào để thêm siêu dữ liệu đặc thù cho ứng dụng mà không phải là thuộc tính chuẩn của Word?

Sử dụng Document.CustomDocumentProperties.Add(name, value) với tên và giá trị của thuộc tính; phiên bản Add phù hợp sẽ được chọn dựa trên kiểu dữ liệu của giá trị.

Sự khác nhau giữa BuiltInDocumentProperties và CustomDocumentProperties là gì?

BuiltInDocumentProperties là tập hợp cố định các trường siêu dữ liệu tiêu chuẩn của Word (tác giả, tiêu đề, thống kê, v.v.), được truy cập như các thuộc tính có tên. CustomDocumentProperties là một bộ sưu tập mở, có tên của các giá trị DocumentProperty cho siêu dữ liệu do ứng dụng định nghĩa, được truy cập theo tên thông qua bộ chỉ mục (ví dụ properties[name]) và Contains.

Làm sao tôi có thể đọc một thuộc tính tùy chỉnh mà không biết trước kiểu dữ liệu lưu trữ chính xác của nó?

Lấy DocumentProperty bằng cách chỉ mục vào bộ sưu tập (ví dụ properties[name]), kiểm tra Type của nó (một giá trị PropertyType), và sử dụng bộ truy cập kiểu phù hợp như ToInt(), ToDouble(), ToDateTime(), hoặc ToBool() trên Value của nó.

Làm sao tôi có thể làm cho một thuộc tính tùy chỉnh theo dõi một phần nội dung tài liệu?

Sử dụng CustomDocumentProperties.AddLinkToContent(name, linkSource), truyền tên bookmark làm linkSource; giá trị của thuộc tính sau đó sẽ phản ánh nội dung đã được đánh dấu thay vì một giá trị tĩnh.


API Reference Tóm tắt

Lớp/Phương thứcMô tả
Document.BuiltInDocumentPropertiesCác trường siêu dữ liệu tiêu chuẩn của Word (tác giả, tiêu đề, thống kê, bảo mật, v.v.)
Document.CustomDocumentPropertiesCác thuộc tính siêu dữ liệu có tên do ứng dụng định nghĩa
CustomDocumentProperties.Add(name, value)Thêm một thuộc tính tùy chỉnh từ tên và giá trị đã được xác định kiểu
CustomDocumentProperties.AddLinkToContent(name, linkSource)Thêm một thuộc tính tùy chỉnh được liên kết với nội dung tài liệu đã đánh dấu
DocumentPropertyCollectionCơ sở trừu tượng chia sẻ cho cả hai bộ sưu tập thuộc tính
DocumentPropertyTên của một thuộc tính duy nhất, giá trị chưa được gán kiểu, và PropertyType
DocumentProperty.ToInt() / ToDouble() / ToDateTime() / ToBool()Các accessor có kiểu cho giá trị của thuộc tính
PropertyTypeEnum mô tả kiểu giá trị của DocumentProperty’s value type
DocumentSecurityEnum mô tả trạng thái bảo vệ của tài liệu, thông qua BuiltInDocumentProperties.Security

Xem thêm

 Tiếng Việt