运行是具有相同字符格式的字符序列。通常,您会将共享相同格式的所有文本写入同一运行,以避免在不需要的地方产生运行“容器”开销(每个大约 20 个字节)。因此,您最终得到的解决方案听起来像是推荐的方法。
但是解决缺少的空白问题,如果你想要“玛丽有一只小羊羔”。并且全部使用相同的字体(考虑粗体或斜体与常规字体不同),您将使用:
p.add_run("Mary had a little lamb.")
如果你这样做:
p.add_run("Mary")
p.add_run("had")
p.add_run("a")
p.add_run("little")
p.add_run("lamb.")
你会得到你想要的,即“Maryhadalittlelamb.”,因为你没有提供你想要的前导和/或尾随空格。添加运行并不会尝试找出您想要空格的位置,它只是按照您的要求进行操作。
相反,如果您这样做了:
p.add_run("Mary ")
p.add_run("had")
p.add_run(" a ")
p.add_run("little")
p.add_run(" lamb.")
你会得到“玛丽有一只小羊羔”。
如果您发布实际输入和特定意外输出的示例,也许我可以提供更多解释。
关于 20 字节的开销,添加包含文本 'foo' 和 'bar' 的单独运行会生成如下 XML:
<w:r>
<w:t>foo</w:t>
</w:r>
<w:r>
<w:t>bar</w:t>
</w:r>
而包含文本 'foobar' 的单次运行会生成此 XML,如果您忽略用于在此处进行漂亮打印的换行符和缩进空格(将在保存时删除),则会缩短 22 个字符:
<w:r>
<w:t>foobar</w:t>
</w:r>
其中一些会被压缩,因为 .docx 文件是一个 Zip 档案,我想这只是我的工程习惯,尽量减少浪费,这会让我寻找更经济的解决方案 :)