|
@@ -9,10 +9,12 @@ import json
|
|
|
import os
|
|
|
import time
|
|
|
from urllib.parse import unquote
|
|
|
+from docx import Document
|
|
|
+from docx.enum.text import WD_ALIGN_PARAGRAPH
|
|
|
+
|
|
|
|
|
|
import lark_oapi as lark
|
|
|
import tos
|
|
|
-from docx import Document
|
|
|
from lark_oapi.api.drive.v1 import CreateExportTaskRequest, ExportTask, CreateExportTaskResponse, GetExportTaskRequest, \
|
|
|
GetExportTaskResponse, DownloadExportTaskRequest, DownloadExportTaskResponse
|
|
|
from tos import HttpMethodType
|
|
@@ -51,7 +53,48 @@ def f_upload_file(save_path) -> str:
|
|
|
print('fail with unknown error: {}'.format(e))
|
|
|
|
|
|
|
|
|
-def f_doc_export(token: str, data: object) -> str:
|
|
|
+
|
|
|
+def create_word_table(json_data):
|
|
|
+
|
|
|
+ # 将JSON字符串解析为Python对象
|
|
|
+ json_data = json.loads(json_data)
|
|
|
+
|
|
|
+ # 创建 Word 文档对象
|
|
|
+ document = Document()
|
|
|
+ # 创建表格
|
|
|
+ table = document.add_table(rows=len(json_data['data']), cols=len(json_data['data'][0]))
|
|
|
+ # 填充表格数据
|
|
|
+ for i, row in enumerate(json_data['data']):
|
|
|
+ for j, cell_value in enumerate(row):
|
|
|
+ cell = table.cell(i, j)
|
|
|
+ cell.text = cell_value.strip() # 去除单元格文本前后的空白字符
|
|
|
+
|
|
|
+ # 设置表格样式
|
|
|
+ table.style = 'Table Grid'
|
|
|
+ for row in table.rows:
|
|
|
+ for cell in row.cells:
|
|
|
+ cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
|
|
|
+
|
|
|
+ # 合并单元格并处理换行问题
|
|
|
+ for merge in json_data.get('merges', []): # 增加空值处理
|
|
|
+ start_cell = table.cell(merge['start_row'], merge['start_column'])
|
|
|
+ end_cell = table.cell(merge['end_row'], merge['end_column'])
|
|
|
+ start_cell.merge(end_cell)
|
|
|
+ # 合并后,将所有文本合并到一个段落中
|
|
|
+ all_text = ""
|
|
|
+ for paragraph in start_cell.paragraphs:
|
|
|
+ all_text += paragraph.text
|
|
|
+ # 清除原有段落
|
|
|
+ for paragraph in start_cell.paragraphs:
|
|
|
+ p = paragraph._element
|
|
|
+ p.getparent().remove(p)
|
|
|
+ p._p = p._element = None
|
|
|
+ # 添加一个新的段落,包含所有文本
|
|
|
+ start_cell.add_paragraph(all_text)
|
|
|
+
|
|
|
+ return table
|
|
|
+
|
|
|
+def f_doc_export(token: str, request_id: str, data: object) -> str:
|
|
|
# 飞书在线文档转word
|
|
|
app_id = BaseConfig.app_id
|
|
|
app_secret = BaseConfig.app_secret
|
|
@@ -129,17 +172,16 @@ def f_doc_export(token: str, data: object) -> str:
|
|
|
# 操作word
|
|
|
if data is not None:
|
|
|
doc = Document(save_path)
|
|
|
- placeholder = ""
|
|
|
+ placeholder = "{TABLE_PLACEHOLDER}"
|
|
|
for paragraph in doc.paragraphs:
|
|
|
if not placeholder in paragraph.text:
|
|
|
continue
|
|
|
# 清除占位符
|
|
|
for run in paragraph.runs:
|
|
|
run.text = run.text.replace(placeholder, "")
|
|
|
-
|
|
|
- table = doc.add_table(rows=1, cols=[])
|
|
|
-
|
|
|
- paragraph._element.addnext(table._element)
|
|
|
+ # 生成表格(调用改造后的 create_word_table 函数,传入字符串)
|
|
|
+ table = create_word_table(data)
|
|
|
+ paragraph._element.addnext(table._tbl)
|
|
|
doc.save(save_path)
|
|
|
time.sleep(2)
|
|
|
|