เมื่อคุณเปรียบเทียบไฟล์ Word สองไฟล์และความแตกต่างเพียงอย่างเดียวคือวิธีการตั้งหมายเลขของรายการ เช่น ข้อที่เคยเป็น 1. และ 2. ตอนนี้กลายเป็น a. และ b. หรือรายการที่มีหมายเลขกลายเป็นรายการแบบหัวข้อสัญลักษณ์, Aspose.Words จะไม่รายงานความแตกต่างใด ๆ โดยค่าเริ่มต้น บทเรียนนี้จะแสดงวิธีตรวจจับการเปลี่ยนแปลงการตั้งหมายเลขเมื่อเปรียบเทียบไฟล์ Word ด้วย Python นอกจากนี้ยังอธิบายวิธีตรวจสอบ ยอมรับ หรือปฏิเสธการเปลี่ยนแปลงที่พบ.
Key Takeaways
- โดยค่าเริ่มต้น การเปลี่ยนแปลงสไตล์การนับเลขหรืออักขระหัวข้อของรายการจะไม่สร้างการแก้ไขเมื่อคุณเปรียบเทียบไฟล์ Word.
- การตั้งค่า
options.advanced_options.compare_list_definitions = Trueจะรายงานแต่ละย่อหน้ารายการที่ได้รับผลกระทบเป็นการแก้ไขFORMAT_CHANGE. - การเปลี่ยนแปลงข้อความภายในรายการจะถูกรายงานไม่ว่าจะเป็นอย่างไร ตัวเลือกนี้จะเพิ่มการเปลี่ยนแปลงการนับเลขและหัวข้อเท่านั้น.
ignore_formatting=Trueจะซ่อนการเปลี่ยนแปลงการนับเลขแม้ว่า ตัวเลือกจะเปิดอยู่.
ทำไมการเปลี่ยนแปลงการจัดลำดับเลขไม่แสดงโดยค่าเริ่มต้น
การจัดลำดับเลขและสัญลักษณ์หัวข้อใน Word มาจากการกำหนดรายการ ซึ่งอธิบายว่าระดับรายการแต่ละระดับดูเป็นอย่างไร: รูปแบบเลข (1., a., i.), ตัวอักษรสัญลักษณ์หัวข้อ, และการจัดรูปแบบที่เกี่ยวข้อง เมื่อคุณเปรียบเทียบเอกสาร, Aspose.Words จะทำตาม Microsoft Word เป็นค่าเริ่มต้นและละเว้นการกำหนดรายการออกจากการเปรียบเทียบ ดังนั้นหากมีการเปลี่ยนแปลงเฉพาะการจัดลำดับเลข การเปรียบเทียบจะไม่พบอะไรให้รายงาน.
compare_list_definitions ตัวเลือกไม่มีเทียบเท่าใน Word. มันบอกให้ Aspose.Words รวมคำนิยามรายการในการเปรียบเทียบ. นี่คือสิ่งที่เราเห็นเมื่อเปรียบเทียบรายการสองรายการในเวอร์ชัน 26.9:
| รายการต้นฉบับ | รายการที่แก้ไข | ตัวเลือกปิด | ตัวเลือกเปิด |
|---|---|---|---|
ลำดับเลข 1. 2. | หัวข้อแบบจุด | 0 การแก้ไข | 2 FORMAT_CHANGE |
ลำดับเลข 1. 2. | ลำดับอักษร a. b. | 0 การแก้ไข | 2 FORMAT_CHANGE |
| ลำดับเลข, “รายการที่ 2” | หัวข้อแบบจุด, “รายการที่สอง” | 2 (DELETION, INSERTION) | 4 (เพิ่ม 2 FORMAT_CHANGE) |
| ลำดับเลข | รายการลำดับเลขที่เหมือนกัน | 0 การแก้ไข | 0 การแก้ไข |
แถวสุดท้ายมีความสำคัญในการปฏิบัติ การเปิดตัวเลือกนี้จะไม่สร้างการแก้ไขเพิ่มเติมสำหรับรายการที่เหมือนกันในทั้งสองไฟล์.
ข้อกำหนดเบื้องต้น
คุณต้องการ Aspose.Words for Python via .NET 26.9 หรือเวอร์ชันที่ใหม่กว่า ติดตั้งหรืออัปเกรดจาก PyPI
pip install --upgrade "aspose-words>=26.9"
หากไม่มีใบอนุญาต Aspose.Words จะทำงานในโหมดประเมินผลพร้อมข้อจำกัด ใบอนุญาตชั่วคราว ใบอนุญาตชั่วคราว จะลบข้อจำกัดเหล่านั้นออกขณะคุณทำการทดสอบ.
ดูความแตกต่าง: การเปลี่ยนแปลงการจัดลำดับเลขที่มีและไม่มีตัวเลือก
สคริปต์ต่อไปนี้สร้างเอกสารสองฉบับที่มีรายการเดียวกันสองรายการ รายการแรกใช้รายการลำดับเลขที่ และรายการที่สองใช้รายการแบบหัวข้อย่อย มันเปรียบเทียบทั้งสองครั้ง ครั้งหนึ่งเมื่อปิดตัวเลือกและอีกครั้งเมื่อเปิดตัวเลือก เพื่อให้คุณเห็นว่าตัวเลือกเปลี่ยนแปลงอะไรบ้างอย่างชัดเจน
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")
การรันสคริปต์พิมพ์:
compare_list_definitions=False: 0 revision(s)
compare_list_definitions=True: 2 revision(s)
FORMAT_CHANGE: Item 1
FORMAT_CHANGE: Item 2
วิธีการทำงานของโค้ด
build_list_documentใช้DocumentBuilder.list_formatเพื่อเริ่มรายการที่มีหมายเลขหรือรายการแบบหัวข้อย่อยเริ่มต้น, เขียนสองรายการ, แล้วเรียกremove_numbers()เพื่อให้ย่อหน้าที่ตามมาภายหลังไม่เป็นส่วนหนึ่งของรายการ.CompareOptions.advanced_optionsเปิดเผยcompare_list_definitionsซึ่งค่าเริ่มต้นคือFalse.original.compare(...)เปรียบเทียบoriginalกับeditedและบันทึกความแตกต่างเป็นการแก้ไขภายในoriginal. วิธีการนี้คืนค่าNoneดังนั้นให้อ่านผลลัพธ์จากเอกสารที่คุณเรียกใช้เสมอ.parent_nodeของแต่ละการแก้ไข คือย่อหน้ารายการที่รูปแบบถูกเปลี่ยน.revision_typeคือRevisionType.FORMAT_CHANGEสำหรับการเปลี่ยนแปลงหมายเลขและหัวข้อย่อย.
ตรวจจับการเปลี่ยนแปลงการจัดลำดับเลขระหว่างไฟล์ Word สองไฟล์
ในกระบวนการทำงานจริง คุณจะเปรียบเทียบไฟล์ที่มีอยู่สองไฟล์ เช่น เวอร์ชันสองของสัญญา การเปรียบเทียบเหล่านี้มักจะมีการแก้ไขอื่น ๆ ด้วย ดังนั้นสคริปต์ด้านล่างจึงเก็บเฉพาะการเปลี่ยนแปลงรูปแบบที่อยู่บนย่อหน้ารายการเท่านั้น
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")
ในการทดสอบของเรา เวอร์ชัน 2 ของสัญญาได้เปลี่ยนรายการลำดับเลขเป็นรายการหัวข้อและยังทำให้ประโยคที่ไม่เกี่ยวข้องเป็นตัวหนา ผลลัพธ์คือ:
Total revisions: 5
Formatting changes on list paragraphs: 2
Invoices are due in 30 days.
Late fees apply after 45 days.
ตัวกรองจะคัดเลือกรายการสองรายการในรายการและข้ามการเปลี่ยนแปลงเป็นตัวหนา เพราะการแก้ไขนั้นอยู่บนข้อความแทนที่จะอยู่บนย่อหน้ารายการ โปรดจำไว้ว่า มันจับคู่การเปลี่ยนแปลงการจัดรูปแบบระดับย่อหน้าบนรายการใด ๆ เช่น การเยื้องที่เปลี่ยนแปลง ไม่ใช่แค่การนับเลขเท่านั้น ตรวจสอบเอกสารที่บันทึกไว้หากคุณต้องการแยกความแตกต่างเหล่านั้นออก
ตรวจสอบ ยอมรับ หรือ ปฏิเสธ การเปลี่ยนแปลงการจัดลำดับเลข
เนื่องจากการเปลี่ยนแปลงการจัดลำดับเลขเป็นการแก้ไขรูปแบบทั่วไป คุณจึงจัดการมันเช่นเดียวกับการแก้ไขอื่น ๆ
revisions.accept_all()ใช้การจัดรูปแบบรายการที่แก้ไขแล้ว ในตัวอย่างแรก รายการทั้งสองจะกลายเป็น bullet.revisions.reject_all()รักษาการจัดรูปแบบเดิม ดังนั้นรายการจะคงเป็นการนับเลข1.และ2..- การบันทึกเอกสารจะบันทึกการแก้ไขเป็นการเปลี่ยนแปลงที่ติดตามไว้ ทำให้ผู้ตรวจสอบสามารถเปิดไฟล์ใน Microsoft Word และตัดสินใจเกี่ยวกับการเปลี่ยนแปลงแต่ละรายการด้วยตนเอง.
คุณยังสามารถเรียก accept() หรือ reject() บนวัตถุ Revision แต่ละรายการได้ ตัวอย่างเช่นบนเฉพาะรายการในรายการ list_changes จากส่วนก่อนหน้า
เมื่อใดควรตรวจจับการเปลี่ยนแปลงการจัดลำดับเลข
เปิดตัวเลือกนี้เมื่อการจัดลำดับเลขของรายการมีความหมายต่อผู้ตรวจสอบของคุณ เอกสารทางกฎหมายและนโยบายเป็นกรณีทั่วไป: การเปลี่ยนลำดับข้อจาก 1. เป็น (a) ทำให้เอกสารอื่นอ้างอิงถึงมันแตกต่างกัน ดังนั้นผู้ตรวจสอบจึงต้องเห็นการเปลี่ยนแปลงนี้ นอกจากนี้ยังเป็นประโยชน์เมื่อคุณย้ายเอกสารระหว่างระบบและต้องการยืนยันว่าการจัดลำดับเลขของรายการยังคงอยู่เหมือนเดิมหลังการย้าย
ปิดไว้เมื่อคุณสนใจเฉพาะคำพูดเท่านั้น การตรวจทานเนื้อหา การตรวจสอบการแปล และการเปรียบเทียบระดับข้อความจะอ่านง่ายขึ้นเมื่อไม่มีการแก้ไขรูปแบบผสมอยู่
สิ่งที่ควรระวัง
ignore_formattingจะลบล้างตัวเลือกนี้ หากคุณตั้งค่าoptions.ignore_formatting = Trueการเปลี่ยนแปลงหมายเลขจะไม่ถูกรายงาน แม้จะเปิดcompare_list_definitions = Trueก็ตาม- ไฟล์ต้องไม่มีการแก้ไขก่อนที่คุณจะทำการเปรียบเทียบ หากเอกสารใดเอกสารหนึ่งมีการติดตามการเปลี่ยนแปลงอยู่แล้ว
compareจะโยนRuntimeErrorขึ้นมาบอกว่าเอกสารที่เปรียบเทียบต้องไม่มีการแก้ไข ให้ยอมรับหรือปฏิเสธการแก้ไขที่มีอยู่ก่อน นอกจากนี้ยังหมายความว่าคุณไม่สามารถทำการเปรียบเทียบครั้งที่สองบนเอกสารที่ยังคงผลลัพธ์ของการเปรียบเทียบครั้งแรกได้; ต้องโหลดไฟล์ใหม่ทุกครั้ง - การแก้ไขอื่น ๆ ยังปรากฏอยู่ ข้อความที่ถูกแทรกหรือถูกลบในรายการจะถูกรายงานไม่ว่าจะเปิดหรือปิดตัวเลือกนี้ ดังนั้นให้ตรวจสอบ
revision_typeหากคุณต้องการแยกการเปลี่ยนแปลงหมายเลขออกจากการเปลี่ยนแปลงข้อความ
ขั้นตอนต่อไป
บทความ เปรียบเทียบเอกสาร ในเอกสารของ Aspose.Words for Python ครอบคลุมการตั้งค่าเปรียบเทียบอื่น ๆ รวมถึงความละเอียด, เป้าหมายการเปรียบเทียบ, และตัวเลือกการละเว้น
FAQs
ทำไม Aspose.Words ไม่ตรวจจับการเปลี่ยนแปลงการจัดลำดับเลขเมื่อเปรียบเทียบไฟล์ Word? โดยค่าเริ่มต้น Aspose.Words จะทำตาม Microsoft Word และละเว้นการกำหนดรายการ เช่น รูปแบบการจัดลำดับเลขหรืออักขระสัญลักษณ์หัวข้อจากการเปรียบเทียบ รายการที่เปลี่ยนจากตัวเลขเป็นสัญลักษณ์หัวข้อจะไม่สร้างการแก้ไขใด ๆ เว้นแต่คุณจะเปิดใช้งาน
compare_list_definitions.ฉันจะตรวจจับการเปลี่ยนแปลงการนับเลขใน Python ได้อย่างไร? สร้าง
CompareOptionsตั้งค่าoptions.advanced_options.compare_list_definitionsเป็นTrueแล้วส่งตัวเลือกไปยังDocument.compareแต่ละย่อหน้าของรายการที่หมายเลขหรือสัญลักษณ์หัวข้อเปลี่ยนแปลงจะได้รับการแก้ไขFORMAT_CHANGErevision.การเปลี่ยนแปลงการจัดลำดับเลขทำให้เกิดการแก้ไขประเภทใด? แต่ละย่อหน้ารายการที่ได้รับผลกระทบจะได้รับการแก้ไขประเภท
RevisionType.FORMAT_CHANGE. การยอมรับจะนำการจัดรูปแบบรายการของไฟล์ที่แก้ไขไปใช้, และการปฏิเสธจะคงไว้ซึ่งต้นฉบับ.ตัวเลือกทำงานร่วมกับ ignore_formatting หรือไม่? ไม่. เมื่อ
CompareOptions.ignore_formattingเป็นTrueการเปลี่ยนแปลงหมายเลขจะไม่ถูกรายงาน แม้ว่าcompare_list_definitionsจะเป็นTrue.Document.compare คืนค่าอะไร? ไม่มีค่าใด ๆ มันเขียนความแตกต่างเป็นการแก้ไขลงในเอกสารที่คุณเรียกใช้เมธอดนี้, ดังนั้นคุณต้องอ่านจากคอลเลกชัน
revisionsของเอกสารนั้น.เวอร์ชันใดของ Aspose.Words for Python ที่เพิ่มตัวเลือกนี้?
compare_list_definitionsproperty ของAdvancedCompareOptionsถูกเพิ่มใน Aspose.Words for Python via .NET 26.9.
