|
|
import copy
|
|
|
import logging
|
|
|
|
|
|
from docx.enum.text import WD_ALIGN_PARAGRAPH
|
|
|
from docx.oxml import CT_P
|
|
|
|
|
|
# 获取日志记录器
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
# 多行多列的数据复制到表格里,由于舆情表格比表1少一列,因此加个判断条件,flag=0,则是从相同表格复制,flag=1,则是从舆情表格复制
|
|
|
def copy_table(
|
|
|
source_table, target_table, start_row, end_row, start_col, end_col, flag
|
|
|
):
|
|
|
try:
|
|
|
logger.info("遍历源表格的指定范围,将数据复制到目标表格的相同位置")
|
|
|
# 遍历源表格的指定范围,将数据复制到目标表格的相同位置
|
|
|
for i in range(start_row, end_row):
|
|
|
for j in range(start_col, end_col):
|
|
|
# 获取源表格单元格的内容
|
|
|
source_cell = source_table.cell(i, j)
|
|
|
# 将内容复制到目标表格的对应单元格
|
|
|
if flag == 0:
|
|
|
target_table.cell(i, j).text = source_cell.text
|
|
|
if flag == 1:
|
|
|
# j+1即表给从后一列开始添加数据
|
|
|
target_table.cell(i, j + 1).text = source_cell.text
|
|
|
except Exception as e:
|
|
|
logger.exception(f"复制表格数据时发生错误: {e}")
|
|
|
raise e
|
|
|
|
|
|
|
|
|
# 将自行统计是数据插入word表格中
|
|
|
# update:2025-07-04 删除多余行
|
|
|
def copy_sta_table(
|
|
|
target_table,
|
|
|
data,
|
|
|
start_row,
|
|
|
start_col,
|
|
|
is_dynamics: bool = None,
|
|
|
length: int = None,
|
|
|
):
|
|
|
try:
|
|
|
logger.info("开始将自行统计的数据插入word表格中")
|
|
|
# update:2025-07-04 删除多余的行数
|
|
|
if is_dynamics is not None and is_dynamics and len(data) < length:
|
|
|
for i in range(len(data) - 1):
|
|
|
source_row = target_table.rows[-1]._element
|
|
|
new_row_element = copy.deepcopy(source_row)
|
|
|
target_table._element.append(new_row_element)
|
|
|
new_row = target_table.rows[-1]
|
|
|
target_cell = new_row.cells[0]
|
|
|
while len(target_cell.paragraphs) > 1:
|
|
|
p_to_remove = target_cell.paragraphs[-1]._element
|
|
|
target_cell._element.remove(p_to_remove)
|
|
|
if not target_cell.paragraphs:
|
|
|
target_cell._element.append(CT_P())
|
|
|
main_paragraph = target_cell.paragraphs[0]
|
|
|
for run in main_paragraph.runs:
|
|
|
run.text = ""
|
|
|
main_paragraph.text = ""
|
|
|
main_paragraph.add_run(str(i + 2))
|
|
|
main_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
|
|
|
# 遍历列表,将其插入到表格的指定位置
|
|
|
for i in range(len(data)):
|
|
|
for j in range(len(data[i])):
|
|
|
# 计算目标表格中的行和列索引
|
|
|
target_row = start_row + i
|
|
|
target_col = start_col + j
|
|
|
# 将数据插入到目标表格的对应单元格
|
|
|
target_table.cell(target_row, target_col).text = str(data[i][j])
|
|
|
except Exception as e:
|
|
|
logger.exception(f"自行统计的数据插入word表格中失败: {e}")
|
|
|
raise e
|