Ketika Anda membandingkan dua file Word dan satu‑satunya perbedaan hanyalah cara penomoran daftar, misalnya klausa yang sebelumnya 1. dan 2. kini menjadi a. dan b., atau daftar bernomor berubah menjadi daftar berpoin, Aspose.Words tidak melaporkan perbedaan secara default. Tutorial ini menunjukkan cara mendeteksi perubahan penomoran saat membandingkan file Word dalam Python. Tutorial ini juga menjelaskan cara meninjau, menerima, atau menolak perubahan yang ditemukan.
Poin Utama
- Secara default, perubahan pada gaya penomoran atau karakter bullet pada daftar tidak menghasilkan revisi saat Anda membandingkan file Word.
- Menetapkan
options.advanced_options.compare_list_definitions = Truemelaporkan setiap paragraf daftar yang terpengaruh sebagai revisiFORMAT_CHANGE. - Perubahan teks di dalam item daftar dilaporkan dalam kedua kasus. Opsi ini hanya menambahkan perubahan penomoran dan bullet di atasnya.
ignore_formatting=Truemenyembunyikan perubahan penomoran bahkan ketika opsi diaktifkan.
Mengapa Perubahan Penomoran Tidak Ditampilkan Secara Default
Penomoran dan bullet di Word berasal dari definisi daftar. Definisi tersebut menjelaskan bagaimana tampilan setiap tingkat daftar: gaya nomor (1., a., i.), karakter bullet, dan pemformatan terkait. Saat Anda membandingkan dokumen, Aspose.Words mengikuti Microsoft Word secara default dan mengabaikan definisi daftar dalam perbandingan. Jadi jika hanya penomoran yang berubah, perbandingan tidak menemukan apa pun untuk dilaporkan.
Option compare_list_definitions tidak memiliki padanan di Word. Ini memberi tahu Aspose.Words untuk menyertakan definisi daftar dalam perbandingan. Berikut ini yang kami lihat saat membandingkan daftar dua item pada versi 26.9:
| Daftar asli | Daftar yang diedit | Opsi nonaktif | Opsi aktif |
|---|---|---|---|
Berurutan 1. 2. | Berbutir | 0 revisi | 2 FORMAT_CHANGE |
Berurutan 1. 2. | Berhuruf a. b. | 0 revisi | 2 FORMAT_CHANGE |
| Berurutan, “Item 2” | Berbutir, “Item two” | 2 (DELETION, INSERTION) | 4 (menambahkan 2 FORMAT_CHANGE) |
| Berurutan | Daftar berurutan identik | 0 revisi | 0 revisi |
Baris terakhir penting dalam praktik. Mengaktifkan opsi ini tidak menghasilkan revisi tambahan untuk daftar yang sama di kedua file.
Prasyarat
Anda memerlukan Aspose.Words for Python via .NET 26.9 atau yang lebih baru. Instal atau tingkatkan dari PyPI:
pip install --upgrade "aspose-words>=26.9"
Tanpa lisensi, Aspose.Words berjalan dalam mode evaluasi dengan batasan. Sebuah lisensi sementara menghapusnya saat Anda menguji.
Lihat Perbedaannya: Perubahan Penomoran Dengan dan Tanpa Opsi
Skrip berikut membuat dua dokumen yang berisi dua item yang sama. Yang pertama menggunakan daftar bernomor, dan yang kedua menggunakan daftar berpoin. Skrip ini membandingkannya dua kali, sekali dengan opsi dimatikan dan sekali dengan opsi diaktifkan, sehingga Anda dapat melihat dengan tepat apa yang diubah oleh opsi tersebut.
import datetime
import aspose.words as aw
def build_list_document(bulleted: bool) -> aw.Document:
"""Create a two-item list, either numbered or bulleted."""
doc = aw.Document()
builder = aw.DocumentBuilder(doc=doc)
if bulleted:
builder.list_format.apply_bullet_default()
else:
builder.list_format.apply_number_default()
builder.writeln("Item 1")
builder.writeln("Item 2")
builder.list_format.remove_numbers()
return doc
def compare_lists(compare_list_definitions: bool) -> aw.Document:
original = build_list_document(bulleted=False)
edited = build_list_document(bulleted=True)
options = aw.comparing.CompareOptions()
options.advanced_options.compare_list_definitions = compare_list_definitions
# compare() writes revisions into `original`; it returns nothing.
original.compare(
document=edited,
author="Reviewer",
date_time=datetime.datetime.now(),
options=options,
)
return original
for flag in (False, True):
result = compare_lists(flag)
print(f"compare_list_definitions={flag}: {result.revisions.count} revision(s)")
for revision in result.revisions:
revision_type = aw.RevisionType(revision.revision_type).name
text = revision.parent_node.get_text().strip()
print(f" {revision_type}: {text}")
result.save("compared-lists.docx")
Menjalankan skrip mencetak:
compare_list_definitions=False: 0 revision(s)
compare_list_definitions=True: 2 revision(s)
FORMAT_CHANGE: Item 1
FORMAT_CHANGE: Item 2
Cara Kerja Kode
build_list_documentmenggunakanDocumentBuilder.list_formatuntuk memulai daftar bernomor atau berpoin default, menulis dua item, dan kemudian memanggilremove_numbers()sehingga paragraf selanjutnya tidak menjadi bagian dari daftar.CompareOptions.advanced_optionsmengeksposcompare_list_definitions, yang secara default bernilaiFalse.original.compare(...)membandingkanoriginaldenganediteddan mencatat perbedaan sebagai revisi di dalamoriginal. Metode ini mengembalikanNone, jadi selalu baca hasilnya dari dokumen tempat Anda memanggilnya.parent_nodesetiap revisi adalah paragraf daftar yang formatnya berubah.revision_typeadalahRevisionType.FORMAT_CHANGEuntuk perubahan penomoran dan poin.
Deteksi Perubahan Penomoran Antara Dua File Word
Dalam alur kerja nyata, Anda membandingkan dua file yang ada, seperti dua versi kontrak. Perbandingan tersebut biasanya juga berisi revisi lain, sehingga skrip di bawah ini hanya mempertahankan perubahan format yang berada pada paragraf daftar.
import datetime
import aspose.words as aw
original = aw.Document("contract-v1.docx")
edited = aw.Document("contract-v2.docx")
options = aw.comparing.CompareOptions()
options.advanced_options.compare_list_definitions = True
original.compare(edited, "Reviewer", datetime.datetime.now(), options)
# Keep only formatting revisions that sit on list paragraphs.
list_changes = [
rev for rev in original.revisions
if rev.revision_type == aw.RevisionType.FORMAT_CHANGE
and rev.parent_node is not None
and rev.parent_node.node_type == aw.NodeType.PARAGRAPH
and rev.parent_node.as_paragraph().list_format.is_list_item
]
print(f"Total revisions: {original.revisions.count}")
print(f"Formatting changes on list paragraphs: {len(list_changes)}")
for rev in list_changes:
print(f" {rev.parent_node.get_text().strip()}")
original.save("contract-compared.docx")
Dalam pengujian kami, versi 2 dari kontrak mengubah daftar bernomor menjadi bullet dan juga membuat kalimat yang tidak terkait menjadi tebal. Outputnya adalah:
Total revisions: 5
Formatting changes on list paragraphs: 2
Invoices are due in 30 days.
Late fees apply after 45 days.
Filter memilih dua item daftar dan melewatkan perubahan tebal, karena revisi tersebut berada pada teks bukan pada paragraf daftar. Ingat bahwa filter mencocokkan perubahan format tingkat paragraf apa pun pada item daftar, seperti indentasi yang diubah, bukan hanya penomoran. Periksa dokumen yang disimpan jika Anda perlu membedakan keduanya.
Tinjau, Terima, atau Tolak Perubahan Penomoran
Karena perubahan penomoran adalah revisi format biasa, Anda menanganinya dengan cara yang sama seperti revisi lainnya:
revisions.accept_all()menerapkan format daftar yang telah diedit. Pada contoh pertama, kedua item menjadi bullet.revisions.reject_all()mempertahankan format asli, sehingga item tetap bernomor1.dan2..- Menyimpan dokumen menulis revisi sebagai perubahan yang dilacak, sehingga peninjau dapat membuka file di Microsoft Word dan memutuskan setiap perubahan sendiri.
Anda juga dapat memanggil accept() atau reject() pada objek Revision secara individual, misalnya hanya pada item-item dalam daftar list_changes dari bagian sebelumnya.
Kapan Mendeteksi Perubahan Penomoran
Aktifkan opsi ini ketika penomoran dalam daftar memiliki makna bagi peninjau Anda. Dokumen hukum dan kebijakan adalah contoh umum: mengubah penomoran klausa dari 1. menjadi (a) mengubah cara dokumen lain merujuk kepadanya, sehingga peninjau perlu melihatnya. Ini juga berguna ketika Anda memigrasikan dokumen antar sistem dan ingin memastikan bahwa penomoran daftar tetap tidak berubah setelah pemindahan.
Matikan saja ketika Anda hanya peduli pada pemilihan kata. Tinjauan konten, pemeriksaan terjemahan, dan perbedaan tingkat teks lebih mudah dibaca tanpa revisi format yang tercampur.
Things to Watch For
ignore_formattingmenggantikan opsi tersebut. Jika Anda mengaturoptions.ignore_formatting = True, perubahan penomoran tidak dilaporkan, bahkan dengancompare_list_definitions = True.- File tidak boleh berisi revisi sebelum Anda membandingkannya. Jika salah satu dokumen sudah memiliki perubahan yang dilacak,
compareakan memunculkanRuntimeErroryang menyatakan bahwa dokumen yang dibandingkan tidak boleh memiliki revisi. Terima atau tolak revisi yang ada terlebih dahulu. Ini juga berarti Anda tidak dapat menjalankan perbandingan kedua pada dokumen yang sudah menyimpan hasil perbandingan pertama; muat ulang file setiap kali. - Revisi lain tetap muncul. Teks yang disisipkan atau dihapus dalam item daftar dilaporkan baik opsi diaktifkan maupun tidak, jadi periksa
revision_typejika Anda perlu memisahkan perubahan penomoran dari perubahan kata.
Langkah Selanjutnya
Artikel Compare Documents dalam dokumentasi Aspose.Words for Python mencakup pengaturan perbandingan lainnya, termasuk granularitas, target perbandingan, dan opsi mengabaikan.
FAQs
Mengapa Aspose.Words tidak mendeteksi perubahan penomoran saat membandingkan file Word? Secara default, Aspose.Words mengikuti Microsoft Word dan mengabaikan definisi daftar, seperti gaya penomoran atau karakter bullet, dalam perbandingan. Daftar yang berubah dari angka menjadi bullet tidak menghasilkan revisi kecuali Anda mengaktifkan
compare_list_definitions.Bagaimana cara mendeteksi perubahan penomoran di Python? Buat
CompareOptions, setoptions.advanced_options.compare_list_definitionskeTrue, dan berikan opsi tersebut keDocument.compare. Setiap paragraf daftar yang penomorannya atau bullet‑nya berubah akan menerima revisiFORMAT_CHANGE.Jenis revisi apa yang dibuat oleh perubahan penomoran? Setiap paragraf daftar yang terpengaruh mendapatkan revisi dengan tipe
RevisionType.FORMAT_CHANGE. Menerimanya menerapkan format daftar file yang diedit, dan menolaknya mempertahankan yang asli.Apakah opsi ini bekerja bersama dengan ignore_formatting? Tidak. Ketika
CompareOptions.ignore_formattingbernilaiTrue, perubahan penomoran tidak dilaporkan, bahkan jikacompare_list_definitionsbernilaiTrue.Apa yang dikembalikan oleh Document.compare? Tidak ada. Ini menulis perbedaan sebagai revisi ke dalam dokumen yang Anda panggil, sehingga Anda membacanya dari koleksi
revisionsdokumen tersebut.Versi berapa dari Aspose.Words for Python yang menambahkan opsi ini? Properti
compare_list_definitionsdariAdvancedCompareOptionsditambahkan di Aspose.Words for Python via .NET 26.9.
