当前位置: 首页 > 面试题库 >

Python docx在保留样式的同时替换段落中的字符串

堵宏毅
2023-03-14
问题内容

在保留整个文档的格式的同时,我需要帮助替换Word文档中的字符串。

我使用的是python-
docx,在阅读了文档后,它可用于整个段落,因此我松散了诸如粗体或斜体字之类的格式。包括要替换的文本以粗体显示,我希望保持这种状态。我正在使用此代码:

from docx import Document
def replace_string2(filename):
    doc = Document(filename)
    for p in doc.paragraphs:
        if 'Text to find and replace' in p.text:
            print 'SEARCH FOUND!!'
            text = p.text.replace('Text to find and replace', 'new text')
            style = p.style
            p.text = text
            p.style = style
    # doc.save(filename)
    doc.save('test.docx')
    return 1

因此,如果我实现它并想要类似(包含要替换的字符串的段落丢失其格式):

这是 第1款 ,这是 粗体 文本。

这是 第2段 ,我将替换 旧文本

当前结果是:

这是 第1款 ,这是 粗体 文本。

这是第2段,我将替换新文本


问题答案:

我发布了这个问题(即使我在这里看到了几个相同的问题),因为(据我所知)这些问题都没有解决这个问题。我曾经尝试过使用oodocx库,但是没有用。所以我找到了一种解决方法

代码非常相似,但是逻辑是:当我找到包含要替换的字符串的段落时,请使用 runs
添加另一个循环。(这仅在我要替换的字符串具有相同格式的情况下才有效)。

def replace_string(filename):
    doc = Document(filename)
    for p in doc.paragraphs:
        if 'old text' in p.text:
            inline = p.runs
            # Loop added to work with runs (strings with same style)
            for i in range(len(inline)):
                if 'old text' in inline[i].text:
                    text = inline[i].text.replace('old text', 'new text')
                    inline[i].text = text
            print p.text

    doc.save('dest1.docx')
    return 1


 类似资料:
  • 关于字符和段落样式 字符样式是许多字符格式属性的集合,可应用于所选的文本范围。段落样式包括字符和段落格式属性,并可应用于所选段落,也可应用于段落范围。使用字符和段落样式可节省时间,还可确保格式的一致性。 可以使用“字符样式”和“段落样式”面板来创建、应用和管理字符和段落样式。要应用样式,只需选择文本并在其中的一个面板中单击样式名称即可。如果未选择任何文本,则会将样式应用于所创建的新文本。“段落样式

  • 关于字符和段落样式 字符样式是许多字符格式属性的集合,可应用于所选的文本范围。段落样式包括字符和段落格式属性,并可应用于所选段落,也可应用于段落范围。使用字符和段落样式可节省时间,还可确保格式的一致性。可以使用 “字符样式 ”和 “段落样式 ”面板来创建、应用和管理字符和段落样式。要应用样式,只需选择文本并在其中的一个面板中单击样式名称即可。如果未选择任何文本,则会将样式应用于所创建的新文本。 C

  • 注意: Adobe Muse 不再添加新增功能,并将于 2020 年 3 月 26 日停止支持。有关详细信息和帮助,请参阅 Adobe Muse 服务结束页面。 Adobe Muse 提供了一种直观的机制来保存和重复使用应用于对象的样式。创建和重复使用样式是在网站的所有页面上实现设计和外观一致性的简单方法。样式还允许您快速更新网站重做颜色、字体、文本格式等。 使用 Muse 中的样式可以实现: 网

  • 我正在开发一个反应应用程序,我正在使用Firebase来存储我的数据。我在换行符方面遇到了问题。当我向Firebase提交带有多个段落的博客文章时,它会存储带有隐藏换行符的字符串。我说隐藏是因为您无法仅通过在Firebase控制台中查看它们来查看它们,但我知道Firebase确实存储了它们。问题是当文本读回应用程序时,我不确定如何将其显示为多个段落。换行符仍然存在,但html不会将换行符呈现为段落

  • 问题内容: 我有一个带有textarea的表单,我想保留输出内容时用户输入的换行符。 例如,如果我在textarea中写: 这是一个句子。这是另一个。这里还有一个。 这是一个新段落。这是一个新句子。这是另一个。 我想要相同的输出,而 不是 : 这是一个句子。这是另一个。这里还有一个。这是一个新段落。这是一个新句子。这是另一个。 如何保留换行符? 问题答案: 通常,您只需要添加 空格修剪为单个空格

  • 问题内容: 我的代码而不是使用代码,因为我之前有过。 所以我的代码: 项目说明包含未呈现的换行符。 假设我已具备上述条件,如何轻松显示换行符? 问题答案: 基于@pilau的答案-但经过改进,即使是公认的答案也没有。 这将使用给定的换行符和空格,但也会在内容边界处中断内容。有关空白属性的更多信息,可以在这里找到: https://developer.mozilla.org/zh-CN/docs/W