python-docx - 如何重新启动列表刻字

标签 python python-docx

我正在使用 python-docx 模块自动执行创建 Word 文档的过程。特别是,我正在创建一个多项选择测试,其中问题编号为 1.、2.、3....,每个问题下有 4 个答案应标记为 A.、B.、C.、和 D. 我使用一种样式来创建编号列表和字母列表。但是,我不知道如何重新启动字母。例如,第二个问题的答案范围为 E.、F.、G.、H。有谁知道如何将字母重新写回 A?我可以手动指定答案字符串中的字母,但我想知道如何使用样式表来完成。谢谢你。

最佳答案

简短的回答是 python-docx 尚不支持此功能,但如果您在项目的 Github 问题列表上询问此问题,我们可能会为您提供解决方法:https://github.com/python-openxml/python-docx/issues/25

这个特殊的操作在 Word 中比我认识的任何人想象的都要困难得多。我认为这与在 Word 的三十年中的这么多版本保持某些向后兼容性的需要有关。

只是为了给您一个想法,该样式引用了一个编号定义,该定义本身引用了一个抽象 编号定义。具有样式的每个段落都获得序列中的下一个数字/字母。要重新开始序列,您必须创建一个新的编号定义,该定义引用与前一个相同的抽象编号序列。然后在序列应该重新开始的段落上引用新的编号定义。具有以下样式的段落获得重新启动序列中的下一个数字/字母。

为了实现这一点,您需要:

  1. 找到样式的编号定义
  2. 找到它指向的抽象编号定义
  3. 创建一个设置了重新启动位的新编号定义
  4. 调整段落元素以引用新的编号定义

无论如何,既然我已经发泄了我可以告诉你的所有事情,我们实际上已经让它发挥作用了。我们还没有将它添加到 API 中,但我想主要是因为还不完全清楚 API 应该是什么样子,而且它还没有上升到积压的顶部。但是,如果您非常想要它,一些变通方法可能会为您完成它。

在你的情况下,我想这将是一个折腾。在这种情况下,我想我会强烈考虑将这些位直接放在段落中,但您最好能够做出决定。

关于python-docx - 如何重新启动列表刻字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23446268/

相关文章:

python - 如何在类中使用 scipy 的最小化?

python - python - 如何在Python中没有额外的 '0x'前导字符和 'L'尾随字符的情况下将整数转换为十六进制?

python - 创建word文档,然后将其附加到电子邮件Django

python-3.x - Python Docx 表格行高

python - 忽略特定时间内的异常情况

python - Numpy:求幂运算的负执行时间

python - 如何使用python docx获取word文档中文本的实际样式

python - 使用 Python 的 xlsx 的 "Last modified by"(用户名,而不是时间)属性

python - 在 Python 中读取 .docx 文件以查找删除线、项目符号和其他格式

python - 无法连接到主机 api.telegram.org :443 ssl:default