目录
原理
从Excel表格中读取数据,然后根据列顺序,构建一个树形结构,并将该树形结构写入一个Word文档中,同时使用不同的标题级别来表示树的层次结构。可以设定从某一列开始后面都是兄弟节点。用xmind实现流程图展示。
准备条件:
- python环境+pandas、docx库
- xmind
代码
import pandas as pd
from docx import Document
from docx.shared import Pt
# 读取 Excel 表格数据。在这里填写文件名。代码和文件放到同一文件下
df = pd.read_excel("test.xlsx")
# 设定第m列后面的列都是第m列数据的子节点。这里设定是3
m = 3
# 创建一个字典表示树的层次结构
tree = {"信息": {}}
n = m - 1
# 遍历 Excel 数据,构建树的层次关系
for index, row in df.iterrows():
current_level = tree["信息"]
for i in range(n): # 前 n 列作为层次结构
column_name = df.columns[i]
cell_value = row[i]
if cell_value not in current_level:
current_level[cell_value] = {}
current_level = current_level[cell_value]
# 第 n+1 列及其后作为第 n 列的子节点
if isinstance(current_level, list):
current_level.append(row.iloc[n:])
else:
current_level[row.iloc[n]] = row.iloc[n+1:].tolist()
# 创建一个新的 Word 文档
doc = Document()
# 定义函数将树形结构写入 Word 文档
def write_tree_to_doc(tree, doc, level=0):
for key, value in tree.items():
p = doc.add_paragraph(str(key))
# 设置标题级别
p.style = f"Heading {level+1}"
# 调整字体大小
for run in p.runs:
font = run.font
font.size = Pt(12)
if isinstance(value, dict):
write_tree_to_doc(value, doc, level + 1)
elif isinstance(value, list):
for item in value:
doc.add_paragraph(str(item), style=f"Heading {level+2}")
# 将树形结构写入 Word 文档
write_tree_to_doc(tree, doc)
# 保存 Word 文档
doc.save("output.docx")
print("ok'")
展示
测试文档:
将文件和代码py文件放到同一目录,pycarm运行代码:
打开xmind,点击“文件”——>"导入",形成流程图
生成流程图:
如果要将子节点复制到“中心主题”,剪切复制即可。
结语
希望对你有用,欢迎留言交流。获取python解释器、pycharm和xmind安装包,可关注公众号“PMC数模”回复“001”获取。