main
HuangHai 5 months ago
parent aa829fd727
commit 3ddad04241

@ -0,0 +1,48 @@
from docx import Document
from docx.shared import Pt
from docx.oxml.ns import qn
import re
def markdown_to_docx(markdown_text, output_file="report.docx"):
"""
Markdown 格式的字符串转换为 Word 文档 (.docx)
参数:
markdown_text (str): Markdown 格式的字符串
output_file (str): 输出的 Word 文件名默认 "report.docx"
"""
# 初始化 Word 文档
doc = Document()
# 设置默认字体为宋体
doc.styles['Normal'].font.name = '宋体'
doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '宋体')
# 按行处理 Markdown 内容
for line in markdown_text.split("\n"):
# 处理标题(#、##、###
if line.startswith("#"):
level = line.count("#")
text = line.lstrip("#").strip()
if level == 1:
doc.add_heading(text, level=0)
elif level == 2:
doc.add_heading(text, level=1)
elif level == 3:
doc.add_heading(text, level=2)
# 处理无序列表(- 或 *
elif line.startswith("- ") or line.startswith("* "):
text = line.lstrip("-* ").strip()
doc.add_paragraph(text, style='List Bullet')
# 处理有序列表1. 或 2.
elif re.match(r"^\d+\. ", line):
text = re.sub(r"^\d+\. ", "", line).strip()
doc.add_paragraph(text, style='List Number')
# 处理普通段落
else:
if line.strip(): # 忽略空行
doc.add_paragraph(line.strip())
# 保存 Word 文档
doc.save(output_file)
print(f"Word 文档已生成: {output_file}")

@ -2,6 +2,7 @@ import json
from openai import OpenAI
from Text2Sql.Util.MarkdownToDocxUtil import markdown_to_docx
from Text2Sql.Util.PostgreSQLUtil import PostgreSQLUtil
from Text2Sql.Util.SaveToExcel import save_to_excel
from Text2Sql.Util.Text2SqlUtil import *
@ -92,7 +93,9 @@ if __name__ == "__main__":
prompt = '''
请根据以下 JSON 数据整理出2000字左右的话描述当前数据情况要求
1以Markdown格式返回我将直接通过markdown格式生成Word
2数据内容如下
2标题统一为长春云校数据分析报告
3内容中不要提到JSON数据统一称数据
4数据内容如下
'''
prompt = prompt + json.dumps(_data, ensure_ascii=False)
@ -126,3 +129,5 @@ if __name__ == "__main__":
# 最终 summary 为完整的 Markdown 内容
print("\n\n流式输出完成summary 已拼接为完整字符串。")
# 生成 Word 文档
markdown_to_docx(summary, output_file="d:/report.docx")

Loading…
Cancel
Save