我正在使用Python pptx创建PowerPoint,并且查询结果字符串包含html'd
',并且尝试将其替换为'\ n',例如:
<br><br>
这导致以“ TDsFirst = "\n" + self.TxtStringFromSQLserver.replace('<br><br>', '\n')
TDPs = TDPsFirst.replace('<br>', '\n')
TipDPsText_run.text = TDPs
”结尾的行
我在做什么错?如何将'_x000D_
'转换为退货?
答案 0 :(得分:2)
此行为有点新,但是是预期的行为:
https://python-pptx.readthedocs.io/en/latest/api/text.html#pptx.text.text._Run.text
运行只能包含文本。换行符或段落边界发生在较高级别。特别是,换行符只能在段落内部的两次运行之间发生。段落“中断”只能出现在段落之间的文本框中。
因此,根据您要执行的操作,解决方案可能只是在文本框架级别进行分配,而不是按照变量名TipDPsText_run
建议的运行级别进行分配。 \n
接受换行符(TextFrame.text
),并将其转换为段落边界。
这可能不能完全解决问题,但可以(我给它90%的可能性),并且至少会将问题更改为可以解决的问题。
更新:在进一步检查代码之后,"\x0A"
实际上接受了Run.text
换行符,并将其原样保留在XML中,看起来很像就像换行一样。这种传统的礼节并没有扩展到回车"\x0D"
,就像您看到的"_x000D_"
一样。该额外的CR字节位于其中,因为您正在Windows上运行。因此,您可以通过在文本分配中使用"\x0A"
代替"\n"
来解决此问题。但我建议使用文本框架级分配,因为这种方法与PowerPoint行为更加一致,在这种情况下,输入回车键会创建一个新段落。
答案 1 :(得分:0)
尝试使用回车符(TDPs = TDPsFirst.replace('<br>', '\r')
):
TDPs = TDPsFirst.replace('<br>', '\r\n')
或回车+换行符
Maximum call stack size exceeded
关键似乎是Powerpoint用于换行的字符。
另请参见:
Access newline becoming _x000D_
和
https://social.msdn.microsoft.com/Forums/office/en-US/9c258bd7-f357-4b66-9dbe-3df98855abcc/how-to-import-from-excel-and-keep-the-line-breaks?forum=accessdev