基于fme和python-docx第三方库批量更新不动产调查表
最近应朋友需要批量更新在不动产成果中提交的各种word报表中的指定数据,根据初步的了解,我做了一个基于fme软件和python-docx第三方库进行一个批量的更新方案。
基本情况
1.fme软件本身不支持word文档的读,只支持写出,所有要处理word,我采用的是python-docx第三方库。 2.本案例就以不动产权籍调查表为例,更新一下里面一项面积数据:
3.更新信息表格。
基本思路 基于调查表中的宗地代码和更新表格中的宗地代码,将更新信息和对应调查表挂接后,提取对应更新信息实现信息替换。
具体操作步骤 1.安装第三方库python-docx 具体安装方法,我采用的官方博客里面的教程,很简单,我将库安装在如下路径,方便所有版本fme都可以直接调用。 fme.exe python -m pip install 库名称 --target"C:\Users\admin\Documents\FME\Plugins\Python"
2.使用pythoncaller读取word文档内容
主要代码:
def input(self, feature):
file_doc=feature.getAttribute('path_windows')
print(file_doc)
doc = docx.Document(file_doc)
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
print(cell.text)
feature.setAttribute("data_line", cell.text)
self.pyoutput(feature)
3.读取跟新表中更新数据并挂接 根据宗地代码将更新数据和word中数据挂接在一起;
4.采用pythoncaller更新word文档 主要是将原始word中的数据替换为新的数据,注意源文件会更改。 实现代码
def info_update(self, doc, replace_dict):
# 替换文档中所有文字内容
for para in doc.paragraphs:
# print(para.runs)
for run in para.runs:
# 从字典中对比替换内容
for key, value in replace_dict.items():
if key in run.text:
print(key)
print(value)
run.text = run.text.replace(key, value)
# 替换文档中表格中的内容
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
for run in paragraph.runs:
# 从字典中对比替换内容
for key, value in replace_dict.items():
if key in cell.text:
print(key)
print(value)
run.text = run.text.replace(key, value)
这里因为更新表格内数据每次字体都发生变换,所以下面这个循环我有套了一层上面的循环,这样字体就不会变了。
|