python docx 替换表格中的单词无效
python docx replace words within tables NOT WORKING
大家早上好(那边scanny?)
我有一段代码,因为我想在 Microsoft Word 文档中找到以前的关键字,然后用其他关键字替换它们
代码在 tables 外工作正常,但在 tables 内时没有任何工作应该是:
代码如下:
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
如何配置table信息?
我的代码中缺少什么?
运行 边界是任意的。特别是,不能保证每个单词都有自己的运行。如果您添加 print([run.text for run in inline])
语句,您将看到实际的 运行 内容。
这里唯一可靠的方法是在段落级别工作,也许是这样的:
paragraph.text = paragraph.text.replace(key, other_word)
不幸的副作用是所有字符格式都会丢失。如果您搜索“python-docx search replace”,您应该会找到更多关于如何通过拆分和连接现有的 运行 来解决这个问题,从而在其自身的 [=20= 中隔离特定单词] 进行更换。这不是一个简单的算法。
大家早上好(那边scanny?)
我有一段代码,因为我想在 Microsoft Word 文档中找到以前的关键字,然后用其他关键字替换它们
代码在 tables 外工作正常,但在 tables 内时没有任何工作应该是:
代码如下:
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
如何配置table信息?
我的代码中缺少什么?
运行 边界是任意的。特别是,不能保证每个单词都有自己的运行。如果您添加 print([run.text for run in inline])
语句,您将看到实际的 运行 内容。
这里唯一可靠的方法是在段落级别工作,也许是这样的:
paragraph.text = paragraph.text.replace(key, other_word)
不幸的副作用是所有字符格式都会丢失。如果您搜索“python-docx search replace”,您应该会找到更多关于如何通过拆分和连接现有的 运行 来解决这个问题,从而在其自身的 [=20= 中隔离特定单词] 进行更换。这不是一个简单的算法。