python docx替换表中的单词不起作用

时间:2020-06-24 18:15:06

标签: python-3.x docx python-docx

大家早上好(那边有很多人吗?)

我有一段代码,因为我想在Microsoft Word文档中找到以前的关键字,然后用其他一些关键字替换

该代码在表外部工作正常,但是当在表内部工作时,应该没有任何作用:

代码如下:

from os import listdir
from docx import Document

nuevo_codigo = input('Teclee nuevo codigo: ')
nuevo_servicio = input('Teclee nuevo servicio: ')
nuevo_cobjeto = input('Teclee nuevo codigo del objeto: ')
nuevo_objeto = input('Teclee nuevo objeto: ')
nuevo_cliente = input('Teclee nuevo cliente: ')

path_reporte = "D:/Escritorio/WORD PYTHON"

lista_documentos = []
lista_path = []

# itero para obtener lo que hay en el path
for documento in listdir(path_reporte):

    # obtengo el nombre del documento del path
    lista_documentos.append(documento)
    # concateno el string para obtener el path total
    lista_path.append(path_reporte + '/' + documento)

print(lista_path, lista_documentos)

for i in lista_path:

    document = Document(i)

    dic = {'PYTHON-CODIGO': nuevo_codigo,
           'PYTHON-SERVICIO': nuevo_servicio,
           'PYTHON-COBJETO': nuevo_cobjeto,
           'PYTHON-OBJETO': nuevo_objeto,
           'PYTHON-CLIENTE': nuevo_cliente,
           }

# outside tables word *.docx everything is peachy

    for p in document.paragraphs:

        inline = p.runs

        for j in range(len(inline)):

            text = inline[j].text

            if text in dic.keys():

                text = text.replace(text, dic[text])
                inline[j].text = text

    


# inside tables word *.docx

    for tabla in document.tables:

        for columna in tabla.columns:

            for celda in columna.cells:

                for p in celda.paragraphs:

                    inline = p.runs
                    
                    for j in range(len(inline)):

                        text = inline[j].text

                        if text in dic.keys():

                            text = text.replace(text, dic[text])

                            inline[j].text = text

document.save(i)

这是先前配置的文档之一:

word document configured

在我运行代码之后,就是这样

document after replace has been done

我应该如何配置表格信息?

我的代码中缺少什么?

1 个答案:

答案 0 :(得分:0)

运行边界是任意的。特别是,不能保证每个单词都有其自己的行程。如果添加print([run.text for run in inline])语句,您将看到实际的运行内容。

这里唯一可靠的方法是在段落级别工作,也许像这样:

paragraph.text = paragraph.text.replace(key, other_word)

不幸的副作用是所有字符格式都丢失了。如果您搜索“ python-docx搜索替换”,您应该找到更多有关解决此问题的方法,方法是拆分并合并现有的运行以在其自己的运行中隔离特定单词以进行替换。这不是一个简单的算法。