Cách làm việc với Chỉ mục và Bảng Word trong .NET

Cách làm việc với Chỉ mục và Bảng Word trong .NET

Cách làm việc với Chỉ mục và Bảng trong .NET

Hướng dẫn này cho thấy cách chèn và xây dựng các cấu trúc tham chiếu dựa trên trường mà tài liệu Word sử dụng để tóm tắt nội dung của chúng — mục lục, chỉ mục theo thứ tự bảng chữ cái và bảng trích dẫn — với Aspose.Words FOSS cho .NET. Mỗi cấu trúc được tổng hợp từ các trường đánh dấu ở các vị trí khác trong tài liệu: FieldToc tổng hợp các mục dựa trên tiêu đề và các mục được đánh dấu FieldTC, FieldIndex tổng hợp các dấu FieldXE, và FieldToa tổng hợp các trích dẫn FieldTA. Mọi lớp trường trong họ này kế thừa từ kiểu cơ sở Field trong không gian tên Aspose.Words.Fields.


Hướng dẫn từng bước

Bước 1: Chèn mục lục

Gọi DocumentBuilder.InsertTableOfContents(switches) tại vị trí mà TOC (mục lục) nên xuất hiện, truyền vào một chuỗi chuyển đổi trường theo kiểu Word — ví dụ "\o \"1-3\" \h \z \u" — để kiểm soát các cấp tiêu đề được bao gồm và cách kết quả được định dạng, cùng các chuyển đổi mà Word viết khi một mục lục được chèn qua giao diện người dùng của nó. Thao tác này chèn một FieldToc, cũng cung cấp cùng cấu trúc trực tiếp dưới dạng các thuộc tính: HeadingLevelRange/EntryLevelRange cho các cấp đề cương được bao gồm, InsertHyperlinks, PreserveTabs/PreserveLineBreaks, và BookmarkName. Đối với bảng hình ảnh thay vì mục lục, hãy đặt TableOfFiguresLabel hoặc CaptionlessTableOfFiguresLabel trên cùng FieldToc.


Bước 2: Đánh dấu các mục mục lục tùy chỉnh

Không phải mọi mục mà mục lục (TOC) nên bao gồm đều đến từ kiểu tiêu đề. Chèn một FieldTC ở vị trí cụ thể để đánh dấu nó là mục TOC độc lập với kiểu đoạn văn: FieldTC.Text là văn bản mục, EntryLevel là mức độ đề cương mà nó sẽ xuất hiện, và OmitPageNumber loại bỏ số trang cho mục đó. Khi một tài liệu cần nhiều hơn một TOC — ví dụ một TOC chính và một bảng hình riêng — đặt FieldTC.TypeIdentifier sao cho trùng với EntryIdentifier của FieldToc sẽ thu thập nó.


Bước 3: Tạo mục lục phụ từ các mục đã đánh dấu

Đánh dấu mỗi vị trí thuộc mục lục phụ bằng một FieldXE, đặt Text là văn bản mục; EntryType nhóm các mục thành các cấp phụ bằng cú pháp phân tách bằng dấu hai chấm, và PageRangeBookmarkName đánh dấu một dấu trang mà phạm vi của nó trở thành một dải trang trong mục lục phụ thay vì một số trang đơn lẻ. FieldIndex tổng hợp mọi dấu FieldXE trong tài liệu thành kết quả theo thứ tự chữ cái — đặt Heading để chèn các phân cách tiêu đề chữ cái (A, B, C…), LetterRange để giới hạn mục lục phụ trong một phần của bảng chữ cái, và RunSubentriesOnSameLine để kiểm soát bố cục mục con. PageNumberSeparator, PageRangeSeparator, SequenceSeparator và CrossReferenceSeparator kiểm soát dấu câu giữa một mục và tham chiếu trang của nó. Các kiểu hiển thị mục lục phụ có sẵn trong Word được cung cấp dưới dạng enum FieldIndexFormat (Template, Classic, Fancy, Modern, Bulleted, Formal, Simple).


Bước 4: Tạo Bảng Thẩm Quyền từ các Trích Dẫn

Đánh dấu mỗi trích dẫn trong văn bản bằng một FieldTA: LongCitation và ShortCitation chứa văn bản trích dẫn, EntryCategory nhóm nó dưới một tiêu đề như “Cases” hoặc “Statutes”, và IsBold/IsItalic kiểm soát định dạng của nó. FieldToa tổng hợp các trích dẫn đó thành một bảng — EntryCategory chọn danh mục nào để tổng hợp, UseHeading kiểm soát việc hiển thị tiêu đề danh mục, UsePassim áp dụng quy ước “passim” cho các nguồn được trích dẫn nhiều lần, và PageRangeSeparator/PageNumberListSeparator/SequenceSeparator/EntrySeparator/RemoveEntryFormatting kiểm soát bố cục.


Bước 5: Làm mới các Trường sau khi Tài liệu Thay đổi

Một TOC, mục lục phụ, hoặc bảng thẩm quyền không tự động cập nhật khi nội dung xung quanh thay đổi. Gọi Update() trên trường cụ thể — ví dụ FieldToc.Update() — để tính lại kết quả, hoặc FieldToc.UpdatePageNumbers() khi chỉ phần số trang cần làm mới. Để làm mới mọi trường trong tài liệu cùng một lúc thay vì từng trường một, gọi Document.UpdateFields(). Hãy nhớ rằng các số trang trong kết quả của các trường này được đánh giá là giá trị placeholder trong phiên bản này, vì bố cục trang và phân trang không thuộc về nó.


Bước 6: Bao gồm các Mục từ Tài liệu Khác

Chèn một FieldRD để cho TOC, chỉ mục, hoặc bảng các tài liệu pháp lý kéo các mục từ một tệp khác khi biên dịch. FieldRD.FileName đặt tên cho tài liệu được tham chiếu, và IsPathRelative điều khiển liệu đường dẫn đó có được giải quyết tương đối với tài liệu hiện tại hay không. Thêm một FieldRD cho mỗi tài liệu bổ sung và cập nhật trường biên dịch sau đó để kết quả kết hợp bao gồm nội dung được tham chiếu.


Các vấn đề thường gặp và cách khắc phục

Mục lục không bao gồm các tiêu đề dự kiến. Chuỗi chuyển đổi của TOC (hoặc HeadingLevelRange) loại trừ các cấp đề mục đó. Điều chỉnh các chuyển đổi được truyền tới InsertTableOfContents, hoặc đặt FieldToc.HeadingLevelRange trực tiếp.

Mục chỉ mục không xuất hiện ở vị trí dự kiến. Dấu hiệu tương ứng FieldXE bị thiếu, hoặc nó EntryType cú pháp cấp phụ không khớp với những gì FieldIndex mong đợi. FieldXE các dấu đánh dấu tồn tại và EntryType các giá trị được định dạng một cách nhất quán.

Kết quả trường trông cũ kỹ sau khi chỉnh sửa nội dung. Trường không được cập nhật sau khi chỉnh sửa. Gọi Update() trên trường cụ thể, hoặc Document.UpdateFields() để làm mới mọi trường cùng một lúc.

Các mục từ tài liệu khác không được bao gồm khi biên dịch. Không FieldRD đang tham chiếu tài liệu đó tồn tại, hoặc IsPathRelative không khớp với cách đường dẫn nên được giải quyết. Thêm một FieldRD với đúng FileName and IsPathRelative cài đặt.


Câu hỏi thường gặp

Làm thế nào để chèn mục lục một cách lập trình?

Gọi DocumentBuilder.InsertTableOfContents(switches) với một chuỗi chuyển đổi kiểu Word, chẳng hạn "\o \"1-3\" \h \z \u", tại vị trí mà mục lục sẽ xuất hiện.

Làm sao để đánh dấu văn bản thành một mục chỉ mục?

Chèn một trường FieldXE tại vị trí đó với thuộc tính Text được đặt thành văn bản mục; FieldIndex tổng hợp tất cả các dấu FieldXE trong tài liệu thành kết quả chỉ mục.

Sự khác nhau giữa FieldTC và một mục mục lục dựa trên tiêu đề là gì?

Hành vi mặc định của mục lục trong Word thu thập các mục từ các đoạn văn sử dụng kiểu tiêu đề. FieldTC đánh dấu một vị trí tùy ý làm mục mục lục mà không phụ thuộc vào kiểu đoạn, mà FieldToc có thể bao gồm thông qua việc khớp các giá trị EntryIdentifier/TypeIdentifier.

Làm sao để làm mới mục lục hoặc chỉ mục sau khi tài liệu thay đổi?

Gọi Update() trên trường cụ thể (hoặc UpdatePageNumbers() trên một FieldToc chỉ cho số trang), hoặc Document.UpdateFields() để làm mới mọi trường trong tài liệu.

Có thể biên soạn một TOC hoặc chỉ mục trên nhiều tài liệu không?

Có — chèn một FieldRD trỏ tới mỗi tài liệu bổ sung qua FileName. Trường biên soạn (FieldToc, FieldIndex, hoặc FieldToa) sẽ bao gồm các mục từ các tài liệu đã tham chiếu một khi nó được cập nhật.


Xem thêm

 Tiếng Việt