İki Word dosyasını karşılaştırdığınızda tek fark bir listenin numaralandırılması ise, örneğin 1. ve 2. olan maddeler artık a. ve b. olduysa ya da numaralı bir liste madde işaretli bir listeye dönüştüyse, Aspose.Words varsayılan olarak hiçbir fark raporlamaz. Bu öğreticide, Word dosyalarını Python’da karşılaştırırken numaralandırma değişikliklerini nasıl tespit edeceğinizi gösterir. Ayrıca bulunan değişiklikleri nasıl gözden geçireceğinizi, kabul edeceğinizi veya reddedeceğinizi açıklar.
Temel Çıkarımlar
- Varsayılan olarak, bir listenin numaralandırma stilinde veya madde işareti karakterinde yapılan bir değişiklik, Word dosyalarını karşılaştırdığınızda revizyon üretmez.
options.advanced_options.compare_list_definitions = Trueayarlandığında, etkilenen her liste paragrafı birFORMAT_CHANGErevizyonu olarak raporlanır.- Liste öğeleri içindeki metin değişiklikleri her iki durumda da raporlanır. Bu seçenek yalnızca numaralandırma ve madde işareti değişikliklerini ekler.
ignore_formatting=Trueseçeneği açık olduğunda bile numaralandırma değişikliklerini gizler.
Neden Numaralandırma Değişiklikleri Varsayılan Olarak Görünmez
Word’deki numaralandırma ve madde işaretleri bir liste tanımından gelir. Bu, her liste seviyesinin nasıl göründüğünü açıklar: sayı stili (1., a., i.), madde işareti karakteri ve ilgili biçimlendirme. Belgeleri karşılaştırdığınızda, Aspose.Words varsayılan olarak Microsoft Word’i izler ve liste tanımlarını karşılaştırmadan çıkarır. Bu nedenle yalnızca numaralandırma değiştiyse, karşılaştırma raporlayacak bir şey bulamaz.
compare_list_definitions seçeneğinin Word’de eşdeğeri yoktur. Bu, Aspose.Words’e karşılaştırmada liste tanımlarını dahil etmesini söyler. İşte sürüm 26.9’da iki öğeli listeleri karşılaştırırken gördüklerimiz:
| Orijinal liste | Düzenlenmiş liste | Seçenek kapalı | Seçenek açık |
|---|---|---|---|
Numaralı 1. 2. | Madde işaretli | 0 revizyon | 2 FORMAT_CHANGE |
Numaralı 1. 2. | Harflendirilmiş a. b. | 0 revizyon | 2 FORMAT_CHANGE |
| Numaralı, “Öğe 2” | Madde işaretli, “Öğe iki” | 2 (DELETION, INSERTION) | 4 (ekler 2 FORMAT_CHANGE) |
| Numaralı | Aynı numaralı liste | 0 revizyon | 0 revizyon |
Son satır pratikte önemlidir. Seçeneği açmak, her iki dosyada da aynı olan listeler için ekstra revizyonlar oluşturmaz.
Önkoşullar
Aspose.Words for Python via .NET 26.9 veya daha yeni bir sürüme ihtiyacınız var. Bunu PyPI üzerinden kurun veya yükseltin:
pip install --upgrade "aspose-words>=26.9"
Lisans olmadan, Aspose.Words sınırlamalarla değerlendirme modunda çalışır. Bir geçici lisans test ederken bu sınırlamaları kaldırır.
Farkı Görün: Seçenekle ve Seçeneksiz Numaralandırma Değişiklikleri
Aşağıdaki betik, aynı iki öğeyi içeren iki belge oluşturur. Birincisi numaralı bir liste kullanırken, ikincisi madde işaretli bir liste kullanır. Betik, bunları iki kez karşılaştırır; bir kez seçenek kapalıyken ve bir kez açıkken, böylece seçeneğin tam olarak neyi değiştirdiğini görebilirsiniz.
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")
Betik çalıştırıldığında şu çıktıyı verir:
compare_list_definitions=False: 0 revision(s)
compare_list_definitions=True: 2 revision(s)
FORMAT_CHANGE: Item 1
FORMAT_CHANGE: Item 2
Kodun Çalışma Şekli
build_list_documentDocumentBuilder.list_formatkullanarak varsayılan numaralı veya madde işaretli bir liste başlatır, iki öğe yazar ve ardındanremove_numbers()çağırır, böylece sonraki paragraflar listenin parçası olmaz.CompareOptions.advanced_optionscompare_list_definitionsöğesini ortaya çıkarır; varsayılan değeriFalse‘tur.original.compare(...)originalıeditedile karşılaştırır ve farklarıoriginaliçinde revizyonlar olarak kaydeder. MetotNonedöndürür, bu yüzden sonuçları çağırdığınız belgede okuyun.- Her revizyonun
parent_nodebiçimi değişen liste paragrafıdır.revision_typenumaralandırma ve madde işareti değişiklikleri içinRevisionType.FORMAT_CHANGE‘tir.
İki Word Dosyası Arasındaki Numaralandırma Değişikliklerini Algıla
Gerçek bir iş akışında, iki mevcut dosyayı, örneğin bir sözleşmenin iki sürümünü karşılaştırırsınız. Bu karşılaştırmalar genellikle başka revizyonları da içerir, bu yüzden aşağıdaki betik yalnızca liste paragraflarında bulunan biçimlendirme değişikliklerini tutar.
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")
Testimizde, sözleşmenin 2. sürümü numaralı listeyi madde işaretlerine dönüştürdü ve ayrıca alakasız bir cümleyi kalın yaptı. Çıktı şu şekildeydi:
Total revisions: 5
Formatting changes on list paragraphs: 2
Invoices are due in 30 days.
Late fees apply after 45 days.
Filtre iki liste öğesini seçer ve kalın değişikliğini atlar, çünkü bu revizyon bir liste paragrafı yerine metin üzerinde durur. Bir liste öğesindeki girinti değişikliği gibi paragraf düzeyindeki herhangi bir biçimlendirme değişikliğini, sadece numaralandırmayı değil, eşleştirdiğini unutmayın. Bunları ayırt etmeniz gerekiyorsa kaydedilmiş belgeyi kontrol edin.
Numaralandırma Değişikliklerini Gözden Geçirme, Kabul Etme veya Reddetme
Numaralandırma değişiklikleri sıradan format revizyonları olduğundan, onları diğer revizyonlar gibi aynı şekilde ele alırsınız:
revisions.accept_all()düzenlenmiş liste biçimlendirmesini uygular. İlk örnekte, her iki öğe de madde işaretine dönüşür.revisions.reject_all()orijinal biçimlendirmeyi korur, böylece öğeler1.ve2.olarak numaralı kalır.- Belgeyi kaydetmek, revizyonları izlenen değişiklikler olarak yazar, böylece gözden geçirenler dosyayı Microsoft Word’de açıp her değişikliği kendileri karar verebilir.
Ayrıca, önceki bölümdeki list_changes listesindeki yalnızca öğeler üzerinde, bireysel Revision nesnelerinde accept() veya reject() metodlarını çağırabilirsiniz.
Numaralandırma Değişikliklerini Ne Zaman Algılamalısınız
Liste numaralandırmasının gözden geçirenleriniz için anlam taşıdığı durumlarda seçeneği etkinleştirin. Hukuki ve politika belgeleri yaygın bir örnektir: maddelerin 1.‘den (a)‘ya yeniden numaralandırılması, diğer belgelerin onlara nasıl atıfta bulunduğunu değiştirir, bu yüzden bir gözden geçirenin bunu görmesi gerekir. Ayrıca belgeleri sistemler arasında taşıdığınızda ve liste numaralandırmasının değişmeden kaldığını doğrulamak istediğinizde de faydalıdır.
Sadece kelime seçimlerine önem veriyorsanız bunu kapalı bırakın. İçerik incelemeleri, çeviri kontrolleri ve metin düzeyindeki farklar, biçimlendirme revizyonları karışık olmadan okunması daha kolaydır.
Dikkat Edilmesi Gerekenler
ignore_formattingseçeneği geçersiz kılar.options.ignore_formatting = Trueayarlarsanız,compare_list_definitions = Trueolsa bile numaralandırma değişiklikleri raporlanmaz.- Dosyalar karşılaştırmadan önce revizyon içermemelidir. Eğer belgelerden biri zaten izlenen değişikliklere sahipse,
comparebirRuntimeErrorfırlatarak karşılaştırılan belgelerin revizyon içermemesi gerektiğini söyler. Mevcut revizyonları önce kabul edin veya reddedin. Bu aynı zamanda, bir belgenin zaten ilk karşılaştırmanın sonuçlarını taşıdığı bir ikinci karşılaştırma yapamayacağınız anlamına gelir; dosyaları her seferinde yeniden yükleyin. - Diğer revizyonlar hâlâ görünür. Bir liste öğesindeki eklenmiş veya silinmiş metin, seçenek açık ya da kapalı olsun raporlanır, bu yüzden numaralandırma değişikliklerini sözcük değişikliklerinden ayırmanız gerekiyorsa
revision_typekontrol edin.
Sonraki Adımlar
Belgeleri Karşılaştır makalesi, Aspose.Words for Python belgelerinde, granülerlik, karşılaştırma hedefi ve yoksayma seçenekleri dahil diğer karşılaştırma ayarlarını kapsar.
SSS
Aspose.Words, Word dosyalarını karşılaştırırken numaralandırma değişikliklerini neden tespit etmiyor? Varsayılan olarak, Aspose.Words Microsoft Word’ü izler ve liste tanımlarını, örneğin numaralandırma stili veya madde işareti karakteri gibi, karşılaştırmadan hariç tutar. Sayılardan madde işaretlerine değişen bir liste,
compare_list_definitionsözelliğini etkinleştirene kadar hiçbir revizyon üretmez.Python’da numaralandırma değişikliklerini nasıl algılarım?
CompareOptionsoluşturun,options.advanced_options.compare_list_definitionsözelliğiniTrueolarak ayarlayın ve seçenekleriDocument.comparemetoduna geçirin. Numaralandırması veya madde işareti değişen her liste paragrafı birFORMAT_CHANGErevizyonu alır.Numaralandırma değişikliği ne tür bir revizyon oluşturur? Etkilenen her liste paragrafı
RevisionType.FORMAT_CHANGEtüründe bir revizyon alır. Onu kabul etmek, düzenlenmiş dosyanın liste biçimlendirmesini uygular, reddetmek ise orijinali korur.Seçenek ignore_formatting ile birlikte çalışıyor mu? Hayır.
CompareOptions.ignore_formattingTrueolduğunda, numaralandırma değişiklikleri raporlanmaz,compare_list_definitionsTrueolsa bile.Document.compare ne döndürür? Hiçbir şey. Farkları, üzerinde çağırdığınız belgeye revizyonlar olarak yazar, bu yüzden bunları belgenin
revisionskoleksiyonundan okursunuz.Aspose.Words for Python’in bu seçeneği eklediği sürüm hangisidir?
AdvancedCompareOptionssınıfınıncompare_list_definitionsözelliği Aspose.Words for Python via .NET 26.9 sürümünde eklendi.
