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 = True melaporkan setiap paragraf daftar yang terpengaruh sebagai revisi FORMAT_CHANGE.
  • Perubahan teks di dalam item daftar dilaporkan dalam kedua kasus. Opsi ini hanya menambahkan perubahan penomoran dan bullet di atasnya.
  • ignore_formatting=True menyembunyikan 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 asliDaftar yang dieditOpsi nonaktifOpsi aktif
Berurutan 1. 2.Berbutir0 revisi2 FORMAT_CHANGE
Berurutan 1. 2.Berhuruf a. b.0 revisi2 FORMAT_CHANGE
Berurutan, “Item 2”Berbutir, “Item two”2 (DELETION, INSERTION)4 (menambahkan 2 FORMAT_CHANGE)
BerurutanDaftar berurutan identik0 revisi0 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_document menggunakan DocumentBuilder.list_format untuk memulai daftar bernomor atau berpoin default, menulis dua item, dan kemudian memanggil remove_numbers() sehingga paragraf selanjutnya tidak menjadi bagian dari daftar.
  • CompareOptions.advanced_options mengekspos compare_list_definitions, yang secara default bernilai False.
  • original.compare(...) membandingkan original dengan edited dan mencatat perbedaan sebagai revisi di dalam original. Metode ini mengembalikan None, jadi selalu baca hasilnya dari dokumen tempat Anda memanggilnya.
  • parent_node setiap revisi adalah paragraf daftar yang formatnya berubah. revision_type adalah RevisionType.FORMAT_CHANGE untuk 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 bernomor 1. dan 2..
  • 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_formatting menggantikan opsi tersebut. Jika Anda mengatur options.ignore_formatting = True, perubahan penomoran tidak dilaporkan, bahkan dengan compare_list_definitions = True.
  • File tidak boleh berisi revisi sebelum Anda membandingkannya. Jika salah satu dokumen sudah memiliki perubahan yang dilacak, compare akan memunculkan RuntimeError yang 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_type jika 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

  1. 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.

  2. Bagaimana cara mendeteksi perubahan penomoran di Python? Buat CompareOptions, set options.advanced_options.compare_list_definitions ke True, dan berikan opsi tersebut ke Document.compare. Setiap paragraf daftar yang penomorannya atau bullet‑nya berubah akan menerima revisi FORMAT_CHANGE.

  3. 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.

  4. Apakah opsi ini bekerja bersama dengan ignore_formatting? Tidak. Ketika CompareOptions.ignore_formatting bernilai True, perubahan penomoran tidak dilaporkan, bahkan jika compare_list_definitions bernilai True.

  5. Apa yang dikembalikan oleh Document.compare? Tidak ada. Ini menulis perbedaan sebagai revisi ke dalam dokumen yang Anda panggil, sehingga Anda membacanya dari koleksi revisions dokumen tersebut.

  6. Versi berapa dari Aspose.Words for Python yang menambahkan opsi ini? Properti compare_list_definitions dari AdvancedCompareOptions ditambahkan di Aspose.Words for Python via .NET 26.9.

Dapatkan Lisensi Gratis dan Dukungan