Když porovnáváte dva soubory Word a jediný rozdíl je v číslování seznamu, například odstavce, které byly 1. a 2., jsou nyní a. a b., nebo číslovaný seznam se změnil na odrážkový, Aspose.Words ve výchozím nastavení nehlásí žádné rozdíly. Tento tutoriál vám ukáže, jak při porovnávání souborů Word v Pythonu detekovat změny číslování. Také vysvětluje, jak přezkoumat, přijmout nebo odmítnout nalezené změny.
Klíčové poznatky
- Ve výchozím nastavení změna stylu číslování seznamu nebo znaku odrážky nevytváří žádné revize při porovnávání souborů Word.
- Nastavením
options.advanced_options.compare_list_definitions = Truese každá ovlivněná položka seznamu zaznamená jako revizeFORMAT_CHANGE. - Změny textu uvnitř položek seznamu jsou zaznamenány vždy. Volba pouze přidává změny číslování a odrážek navíc.
ignore_formatting=Trueskryje změny číslování i když je volba zapnutá.
Proč se změny číslování ve výchozím nastavení nezobrazují
Číslování a odrážky ve Wordu pocházejí z definice seznamu. Popisuje, jak vypadá každá úroveň seznamu: styl číslování (1., a., i.), znak odrážky a související formátování. Když porovnáváte dokumenty, Aspose.Words ve výchozím nastavení následuje Microsoft Word a vynechává definice seznamů z porovnání. Takže pokud se změnilo jen číslování, porovnání nehlásí žádné rozdíly.
Možnost compare_list_definitions nemá v aplikaci Word ekvivalent. Říká Aspose.Words, aby zahrnoval definice seznamů do porovnání. Zde je to, co jsme viděli při porovnávání dvoupoložkových seznamů ve verzi 26.9:
| Původní seznam | Upravený seznam | Možnost vypnuta | Možnost zapnuta |
|---|---|---|---|
Číslovaný 1. 2. | Odrážkový | 0 revizí | 2 FORMAT_CHANGE |
Číslovaný 1. 2. | Písmenkový a. b. | 0 revizí | 2 FORMAT_CHANGE |
| Číslovaný, “Položka 2” | Odrážkový, “Položka dva” | 2 (DELETION, INSERTION) | 4 (přidá 2 FORMAT_CHANGE) |
| Číslovaný | Identický číslovaný seznam | 0 revizí | 0 revizí |
Poslední řádek má v praxi význam. Zapnutí této možnosti nevytváří další revize pro seznamy, které jsou ve obou souborech stejné.
Požadavky
Potřebujete Aspose.Words for Python via .NET 26.9 nebo novější. Nainstalujte nebo aktualizujte jej z PyPI:
pip install --upgrade "aspose-words>=26.9"
Bez licence Aspose.Words běží v evaluačním režimu s omezeními. Dočasná licence ji odstraňuje během testování.
Podívejte se na rozdíl: Změny číslování s a bez možnosti
Následující skript vytvoří dva dokumenty, které obsahují stejné dva položky. První používá číslovaný seznam a druhý používá odrážkový seznam. Porovná je dvakrát, jednou s vypnutou možností a podruhé se zapnutou, abyste přesně viděli, co možnost mění.
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")
Spuštění skriptu vypíše:
compare_list_definitions=False: 0 revision(s)
compare_list_definitions=True: 2 revision(s)
FORMAT_CHANGE: Item 1
FORMAT_CHANGE: Item 2
Jak kód funguje
build_list_documentpoužíváDocumentBuilder.list_formatk zahájení výchozího číslovaného nebo odrážkového seznamu, zapíše dva položky a poté zavoláremove_numbers(), aby následující odstavce nebyly součástí seznamu.CompareOptions.advanced_optionsodhalujecompare_list_definitions, který ve výchozím nastavení jeFalse.original.compare(...)porovnáváoriginalsediteda zaznamenává rozdíly jako revize uvnitřoriginal. Metoda vracíNone, takže výsledky vždy čtěte z dokumentu, na kterém jste ji zavolali.parent_nodekaždé revize je odstavec seznamu, jehož formátování se změnilo.revision_typejeRevisionType.FORMAT_CHANGEpro změny číslování a odrážek.
Detekce změn číslování mezi dvěma soubory Word
Ve skutečném pracovním postupu porovnáváte dva existující soubory, například dvě verze smlouvy. Tyto porovnání obvykle obsahují i další revize, takže skript níže zachovává pouze změny formátování, které se nacházejí v odstavcích seznamu.
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")
V našem testu verze 2 smlouvy změnila číslovaný seznam na odrážky a také zvýraznila tučným písmem nesouvisející větu. Výstup byl:
Total revisions: 5
Formatting changes on list paragraphs: 2
Invoices are due in 30 days.
Late fees apply after 45 days.
Filtr vybere dva položky seznamu a přeskočí změnu tučného písma, protože tato revize se vztahuje na text spíše než na odstavec seznamu. Mějte na paměti, že odpovídá jakékoli změně formátování na úrovni odstavce u položky seznamu, například změně odsazení, nejen číslování. Zkontrolujte uložený dokument, pokud potřebujete tyto rozdíly rozlišit.
Přezkoumat, přijmout nebo odmítnout změny číslování
Protože změny číslování jsou běžnými revizemi formátu, zacházíte s nimi stejným způsobem jako s jakoukoli jinou revizí:
revisions.accept_all()použije upravené formátování seznamu. V prvním příkladu se oba položky změní na odrážky.revisions.reject_all()zachová původní formátování, takže položky zůstanou očíslované1.a2..- Uložení dokumentu zapíše revize jako sledované změny, takže recenzenti mohou soubor otevřít v Microsoft Word a sami rozhodnout o každé změně.
Můžete také volat accept() nebo reject() na jednotlivých objektech Revision, například jen na položkách v seznamu list_changes z předchozí sekce.
Kdy detekovat změny číslování
Zapněte tuto možnost, když číslování seznamu má pro vaše recenzenty význam. Právní a politické dokumenty jsou běžným příkladem: přečíslování odstavců z 1. na (a) mění způsob, jakým na ně odkazují jiné dokumenty, takže recenzent to musí vidět. Je to také užitečné, když migrujete dokumenty mezi systémy a chcete potvrdit, že číslování seznamu přežilo přesun beze změny.
Vypněte to, pokud vám záleží jen na formulaci. Recenze obsahu, kontrola překladů a rozdíly na úrovni textu jsou snazší číst bez smíchání revizí formátování.
Na co si dát pozor
ignore_formattingpřepisuje volbu. Pokud nastavíteoptions.ignore_formatting = True, změny číslování nejsou hlášeny, i když jecompare_list_definitions = True.- Soubory nesmí obsahovat revize před jejich porovnáním. Pokud má kterýkoli dokument již sledované změny,
comparevyvoláRuntimeErrors informací, že porovnávané dokumenty nesmí mít revize. Nejprve přijměte nebo odmítněte existující revize. To také znamená, že nemůžete provést druhé porovnání dokumentu, který již obsahuje výsledky prvního; soubory načtěte znovu při každém spuštění. - Jiné revize se stále objevují. Vložený nebo smazaný text v položce seznamu je hlášen bez ohledu na to, zda je volba zapnutá nebo vypnutá, takže zkontrolujte
revision_type, pokud potřebujete oddělit změny číslování od změn textu.
Další kroky
Článek Compare Documents v dokumentaci Aspose.Words for Python pokrývá další nastavení porovnání, včetně granularity, cíle porovnání a možností ignorování.
FAQs
Proč Aspose.Words nedetekuje změny číslování při porovnávání souborů Word? Ve výchozím nastavení Aspose.Words postupuje stejně jako Microsoft Word a ponechává definice seznamů, jako je styl číslování nebo znak odrážky, mimo porovnání. Seznam, který se změní z čísel na odrážky, nevytváří žádné revize, pokud nepovolíte
compare_list_definitions.Jak zjistím změny číslování v Pythonu? Vytvořte
CompareOptions, nastavteoptions.advanced_options.compare_list_definitionsnaTruea předávejte možnosti doDocument.compare. Každý odstavec seznamu, jehož číslování nebo odrážka se změnila, získá reviziFORMAT_CHANGE.Jaký typ revize vytvoří změna číslování? Každý ovlivněný odstavec seznamu získá revizi typu
RevisionType.FORMAT_CHANGE. Přijetím se použije formátování seznamu upraveného souboru a odmítnutím se zachová původní.Funguje tato možnost společně s ignore_formatting? Ne. Když je
CompareOptions.ignore_formattingnastaven naTrue, změny číslování nejsou hlášeny, i když jecompare_list_definitionsnastaven naTrue.Co vrací Document.compare? Nic. Zapíše rozdíly jako revize do dokumentu, na kterém je volána, takže je čtete z kolekce
revisionstohoto dokumentu.Která verze Aspose.Words for Python přidala tuto možnost? Vlastnost
compare_list_definitionstřídyAdvancedCompareOptionsbyla přidána v Aspose.Words for Python via .NET 26.9.
