背景需求:
原来作过一套适合中班操作的门牌号,突出数字差异,一行只贴一个
根据以下代码,制作题目卡和答案卡
设计过程:
word模板
把每页2个表格,做成每页4个表格,便于在表格1、3内写入编号数字、表2、4内写入门牌数字。
都是用deep seek写的全部代码(虽然不用自己写,等它修改和生成全部代码300多行,每次要很长时间),修改了三十几次,终于成功了。
代码展示:
5*5房间,每行一空代码(隐藏了层与间的提示数字代码)
# 门牌号黏贴游戏(适合中班)
# 修改版:6层5间,每层空缺1个,主表格从第2列开始,粘贴区在8-10行2-3列
# 每页两份不同题目,且题目与答案对应
# 代码:DeepSeek,阿夏
# 时间:20250513
import random
import os
import time
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
from docx.oxml import parse_xml
from docx2pdf import convert
from PyPDF2 import PdfFileMerger
import shutil
# 定义颜色常量
DARK_GRAY = RGBColor(0, 0, 0) # 第一个数字颜色
LIGHT_GRAY = RGBColor(170, 170, 170) # 第2-3个数字颜色
# 路径设置
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250808黏贴门牌号'
os.makedirs(path, exist_ok=True)
# 用户输入
num = int(input('生成多少份(双数按班级人数输入28人,实际打印14份)\n'))
size = 35 # 数字大小
height1 = 5 # 楼层数
weight1 = 5 # 每层房间数(改为2间)
# 房间表格位置(主表格从第2列开始)
bg1 = []
for x1 in range(height1-1, -1, -1): # 从顶层到底层
for y1 in range(0, weight1): # 从第1列开始
ww1 = f"{x1}{y1}"
bg1.append(ww1)
print(bg1)
# 粘贴数字区域位置(8-10行,2-3列)
paste_positions = []
for row in range(5, 6): # Word行号从0开始,只有一行黏贴片 索引5行
for col in range(0, 5): # 列号从0开始,1=第2列
paste_positions.append(f"{row}{col}")
print(paste_positions)
# 新建临时文件夹
temp_folder = path + r'\零时Word'
os.makedirs(temp_folder, exist_ok=True)
n = int(num/2) # 实际打印份数(每页2份)
def add_number_to_table(table, number_text):
"""在表格的(0,1)位置添加编号"""
try:
cell = table.cell(0, 1)
cell.text = ""
paragraph = cell.paragraphs[0]
run = paragraph.add_run(number_text)
run.font.name = '黑体'
run._element.rPr.rFonts.set(qn('w:eastAsia'), '黑体')
run.font.size = Pt(14)
run.font.color.rgb = RGBColor(0, 0, 0)
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
except Exception as e:
print(f"添加编号时出错: {e}")
# 为每份文档预先生成两份不同的题目数据
doc_data = []
for z in range(n):
# 第一份题目数据
N1 = [f"{x}{y:02d}" for x in range(1, height1+1) for y in range(1, weight1+1)]
E1 = [N1[e*weight1 : e*weight1+weight1] for e in range(height1)]
G1 = [floor_rooms[random.randint(0, weight1-1)] for floor_rooms in E1]
C1_1 = [" " if room in G1 else room for room in N1]
# 第二份题目数据(确保与第一份不同)
while True:
N2 = [f"{x}{y:02d}" for x in range(1, height1+1) for y in range(1, weight1+1)]
E2 = [N2[e*weight1 : e*weight1+weight1] for e in range(height1)]
G2 = [floor_rooms[random.randint(0, weight1-1)] for floor_rooms in E2]
C1_2 = [" " if room in G2 else room for room in N2]
# 确保两份题目不同(比较G1和G2)
if G1 != G2:
break
doc_data.append({
'N1': N1, 'G1': G1, 'C1_1': C1_1, # 第一份题目数据
'N2': N2, 'G2': G2, 'C1_2': C1_2 # 第二份题目数据
})
# 生成题目和答案文档
for doc_type in ['题目', '答案']:
for z in range(n): # 生成每份文档
doc = Document(path + r'\03_01黏贴门牌号模板竖版2份(5层5间).docx')
# 获取预先生成的两份题目数据
data = doc_data[z]
# 确保文档中有4个表格
if len(doc.tables) >= 4:
# 设置编号(表1和表3)
if doc_type == '题目':
add_number_to_table(doc.tables[0], f"题目:0301_{z*2+1:02}\n{height1} 空格 每行1空")
add_number_to_table(doc.tables[2], f"题目:0301_{z*2+2:02}\n{height1} 空格 每行1空")
else:
add_number_to_table(doc.tables[0], f"答案:0301_{z*2+1:02}\n{height1} 空格 每行1空")
add_number_to_table(doc.tables[2], f"答案:0301_{z*2+2:02}\n{height1} 空格 每行1空")
# 处理第一个题目/答案(表格1)
table1 = doc.tables[1]
N = data['N1'] if doc_type == '答案' else None
G = data['G1']
C1 = data['C1_1']
# 写入第一个表格
for t1 in range(len(bg1)):
pos = bg1[t1]
row, col = int(pos[0]), int(pos[1])
try:
cell = table1.cell(row, col)
cell.paragraphs[0].clear()
if doc_type == '题目':
if C1[t1].strip():
para = cell.paragraphs[0]
for i, char in enumerate(C1[t1].strip()):
run = para.add_run(char)
run.font.color.rgb = DARK_GRAY if i == 0 else LIGHT_GRAY
run.font.name = '华文新魏'
run.font.size = Pt(size)
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
elif doc_type == '答案':
para = cell.paragraphs[0]
room_num = N[t1]
for i, char in enumerate(room_num):
run = para.add_run(char)
run.font.color.rgb = DARK_GRAY if i == 0 else LIGHT_GRAY
run.font.name = '华文新魏'
run.font.size = Pt(size)
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
if room_num in G:
shading = parse_xml(
f'<w:shd xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" '
f'w:fill="c0c0c0"/>'
)
cell._tc.get_or_add_tcPr().append(shading)
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
except IndexError:
print(f"跳过不存在的单元格: 表格1 行{row} 列{col}")
continue
# 题目文档写入粘贴数字(第一个题目)
if doc_type == '题目':
for t2 in range(min(len(G), len(paste_positions))):
pos = paste_positions[t2]
row, col = int(pos[0]), int(pos[1])
try:
cell = table1.cell(row, col)
cell.paragraphs[0].clear()
para = cell.paragraphs[0]
for i, char in enumerate(G[t2]):
run = para.add_run(char)
run.font.color.rgb = DARK_GRAY if i == 0 else LIGHT_GRAY
run.font.name = '华文新魏'
run.font.size = Pt(size)
run.font.underline = True
run.font.bold = True
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
shading = parse_xml(
f'<w:shd xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" '
f'w:fill="c0c0c0"/>'
)
cell._tc.get_or_add_tcPr().append(shading)
except IndexError:
print(f"跳过不存在的粘贴单元格: 表格1 行{row} 列{col}")
continue
# 处理第二个题目/答案(表格3)
table2 = doc.tables[3]
N = data['N2'] if doc_type == '答案' else None
G = data['G2']
C1 = data['C1_2']
# 写入第二个表格
for t1 in range(len(bg1)):
pos = bg1[t1]
row, col = int(pos[0]), int(pos[1])
try:
cell = table2.cell(row, col)
cell.paragraphs[0].clear()
if doc_type == '题目':
if C1[t1].strip():
para = cell.paragraphs[0]
for i, char in enumerate(C1[t1].strip()):
run = para.add_run(char)
run.font.color.rgb = DARK_GRAY if i == 0 else LIGHT_GRAY
run.font.name = '华文新魏'
run.font.size = Pt(size)
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
elif doc_type == '答案':
para = cell.paragraphs[0]
room_num = N[t1]
for i, char in enumerate(room_num):
run = para.add_run(char)
run.font.color.rgb = DARK_GRAY if i == 0 else LIGHT_GRAY
run.font.name = '华文新魏'
run.font.size = Pt(size)
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
if room_num in G:
shading = parse_xml(
f'<w:shd xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" '
f'w:fill="c0c0c0"/>'
)
cell._tc.get_or_add_tcPr().append(shading)
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
except IndexError:
print(f"跳过不存在的单元格: 表格3 行{row} 列{col}")
continue
# 题目文档写入粘贴数字(第二个题目)
if doc_type == '题目':
for t2 in range(min(len(G), len(paste_positions))):
pos = paste_positions[t2]
row, col = int(pos[0]), int(pos[1])
try:
cell = table2.cell(row, col)
cell.paragraphs[0].clear()
para = cell.paragraphs[0]
for i, char in enumerate(G[t2]):
run = para.add_run(char)
run.font.color.rgb = DARK_GRAY if i == 0 else LIGHT_GRAY
run.font.name = '华文新魏'
run.font.size = Pt(size)
run.font.underline = True
run.font.bold = True
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
shading = parse_xml(
f'<w:shd xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" '
f'w:fill="c0c0c0"/>'
)
cell._tc.get_or_add_tcPr().append(shading)
except IndexError:
print(f"跳过不存在的粘贴单元格: 表格3 行{row} 列{col}")
continue
# # 设置楼层和房间号格式(两个表格都需要设置)
# for table in [table1, table2]:
# for y2 in range(7):
# try:
# cell = table.cell(y2, 0)
# shading = parse_xml(
# f'<w:shd xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" '
# f'w:fill="d3d3d3"/>'
# )
# cell._tc.get_or_add_tcPr().append(shading)
# cell.paragraphs[0].clear()
# para = cell.paragraphs[0]
# run = para.add_run(str(6-y2) if (6-y2) != 0 else '')
# run.font.name = '华文新魏'
# run.font.size = Pt(size)
# run.font.color.rgb = DARK_GRAY
# run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
# para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# except IndexError:
# print(f"跳过不存在的楼层单元格: 行{y2} 列0")
# continue
# for y3 in range(1, 3):
# try:
# cell = table.cell(6, y3)
# shading = parse_xml(
# f'<w:shd xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" '
# f'w:fill="d3d3d3"/>'
# )
# cell._tc.get_or_add_tcPr().append(shading)
# cell.paragraphs[0].clear()
# para = cell.paragraphs[0]
# run = para.add_run(f"{y3:02d}室")
# run.font.name = '华文新魏'
# run.font.size = Pt(size)
# run.font.color.rgb = LIGHT_GRAY
# run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
# para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# except IndexError:
# print(f"跳过不存在的房间号单元格: 行6 列{y3}")
# continue
# 保存文档
doc.save(f"{temp_folder}\\{doc_type}_{z+1:02d}.docx")
time.sleep(1)
convert(f"{temp_folder}\\{doc_type}_{z+1:02d}.docx", f"{temp_folder}\\{doc_type}_{z+1:02d}.pdf")
time.sleep(1)
# 合并PDF
def merge_pdfs(file_pattern, output_name):
pdfs = sorted([f for f in os.listdir(temp_folder) if f.startswith(file_pattern) and f.endswith('.pdf')])
if not pdfs:
return
merger = PdfFileMerger()
for pdf in pdfs:
merger.append(os.path.join(temp_folder, pdf))
output_path = os.path.join(path, f"0301_门牌号_{height1}乘{weight1}_每行1空_{output_name}_共{n}份.pdf")
merger.write(output_path)
merger.close()
print(f"已生成: {output_path}")
merge_pdfs("题目", "01题目版")
merge_pdfs("答案", "02答案版")
# 清理临时文件
shutil.rmtree(temp_folder)
print("操作完成!")
生成35份,一页2张,实际17页
以上一组题目和答案都一一对应的。再检查一组
6*2房间,每行一空代码(包含层与间的提示数字代码)
# 门牌号黏贴游戏(适合中班)
# 修改版:6层2间,每层空缺1个,主表格从第2列开始,粘贴区在8-10行2-3列
# 每页两份不同题目,且题目与答案对应
# 代码:DeepSeek,阿夏
# 时间:20250513
import random
import os
import time
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn
from docx.oxml import parse_xml
from docx2pdf import convert
from PyPDF2 import PdfFileMerger
import shutil
# 定义颜色常量
DARK_GRAY = RGBColor(0, 0, 0) # 第一个数字颜色
LIGHT_GRAY = RGBColor(170, 170, 170) # 第2-3个数字颜色
# 路径设置
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\20250808黏贴门牌号'
os.makedirs(path, exist_ok=True)
# 用户输入
num = int(input('生成多少份(双数按班级人数输入28人,实际打印14份)\n'))
size = 35 # 数字大小
height1 = 6 # 楼层数
weight1 = 2 # 每层房间数(改为2间)
# 房间表格位置(主表格从第2列开始)
bg1 = []
for x1 in range(height1-1, -1, -1): # 从顶层到底层
for y1 in range(1, weight1+1): # 从第2列开始
ww1 = f"{x1}{y1}"
bg1.append(ww1)
# 粘贴数字区域位置(8-10行,2-3列)
paste_positions = []
for row in range(7, 10): # Word行号从0开始,7=第8行
for col in range(1, 3): # 列号从0开始,1=第2列
paste_positions.append(f"{row}{col}")
# 新建临时文件夹
temp_folder = path + r'\零时Word'
os.makedirs(temp_folder, exist_ok=True)
n = int(num/2) # 实际打印份数(每页2份)
def add_number_to_table(table, number_text):
"""在表格的(0,1)位置添加编号"""
try:
cell = table.cell(0, 1)
cell.text = ""
paragraph = cell.paragraphs[0]
run = paragraph.add_run(number_text)
run.font.name = '黑体'
run._element.rPr.rFonts.set(qn('w:eastAsia'), '黑体')
run.font.size = Pt(14)
run.font.color.rgb = RGBColor(0, 0, 0)
paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT
except Exception as e:
print(f"添加编号时出错: {e}")
# 为每份文档预先生成两份不同的题目数据
doc_data = []
for z in range(n):
# 第一份题目数据
N1 = [f"{x}{y:02d}" for x in range(1, height1+1) for y in range(1, weight1+1)]
E1 = [N1[e*weight1 : e*weight1+weight1] for e in range(height1)]
G1 = [floor_rooms[random.randint(0, weight1-1)] for floor_rooms in E1]
C1_1 = [" " if room in G1 else room for room in N1]
# 第二份题目数据(确保与第一份不同)
while True:
N2 = [f"{x}{y:02d}" for x in range(1, height1+1) for y in range(1, weight1+1)]
E2 = [N2[e*weight1 : e*weight1+weight1] for e in range(height1)]
G2 = [floor_rooms[random.randint(0, weight1-1)] for floor_rooms in E2]
C1_2 = [" " if room in G2 else room for room in N2]
# 确保两份题目不同(比较G1和G2)
if G1 != G2:
break
doc_data.append({
'N1': N1, 'G1': G1, 'C1_1': C1_1, # 第一份题目数据
'N2': N2, 'G2': G2, 'C1_2': C1_2 # 第二份题目数据
})
# 生成题目和答案文档
for doc_type in ['题目', '答案']:
for z in range(n): # 生成每份文档
doc = Document(path + r'\03_02黏贴门牌号模板竖版2份(6层2间).docx')
# 获取预先生成的两份题目数据
data = doc_data[z]
# 确保文档中有4个表格
if len(doc.tables) >= 4:
# 设置编号(表1和表3)
if doc_type == '题目':
add_number_to_table(doc.tables[0], f"题目:0302_{z*2+1:02}\n{height1} 空格 每行1空")
add_number_to_table(doc.tables[2], f"题目:0302_{z*2+2:02}\n{height1} 空格 每行1空")
else:
add_number_to_table(doc.tables[0], f"答案:0302_{z*2+1:02}\n{height1} 空格 每行1空")
add_number_to_table(doc.tables[2], f"答案:0302_{z*2+2:02}\n{height1} 空格 每行1空")
# 处理第一个题目/答案(表格1)
table1 = doc.tables[1]
N = data['N1'] if doc_type == '答案' else None
G = data['G1']
C1 = data['C1_1']
# 写入第一个表格
for t1 in range(len(bg1)):
pos = bg1[t1]
row, col = int(pos[0]), int(pos[1])
try:
cell = table1.cell(row, col)
cell.paragraphs[0].clear()
if doc_type == '题目':
if C1[t1].strip():
para = cell.paragraphs[0]
for i, char in enumerate(C1[t1].strip()):
run = para.add_run(char)
run.font.color.rgb = DARK_GRAY if i == 0 else LIGHT_GRAY
run.font.name = '华文新魏'
run.font.size = Pt(size)
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
elif doc_type == '答案':
para = cell.paragraphs[0]
room_num = N[t1]
for i, char in enumerate(room_num):
run = para.add_run(char)
run.font.color.rgb = DARK_GRAY if i == 0 else LIGHT_GRAY
run.font.name = '华文新魏'
run.font.size = Pt(size)
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
if room_num in G:
shading = parse_xml(
f'<w:shd xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" '
f'w:fill="c0c0c0"/>'
)
cell._tc.get_or_add_tcPr().append(shading)
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
except IndexError:
print(f"跳过不存在的单元格: 表格1 行{row} 列{col}")
continue
# 题目文档写入粘贴数字(第一个题目)
if doc_type == '题目':
for t2 in range(min(len(G), len(paste_positions))):
pos = paste_positions[t2]
row, col = int(pos[0]), int(pos[1])
try:
cell = table1.cell(row, col)
cell.paragraphs[0].clear()
para = cell.paragraphs[0]
for i, char in enumerate(G[t2]):
run = para.add_run(char)
run.font.color.rgb = DARK_GRAY if i == 0 else LIGHT_GRAY
run.font.name = '华文新魏'
run.font.size = Pt(size)
run.font.underline = True
run.font.bold = True
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
shading = parse_xml(
f'<w:shd xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" '
f'w:fill="c0c0c0"/>'
)
cell._tc.get_or_add_tcPr().append(shading)
except IndexError:
print(f"跳过不存在的粘贴单元格: 表格1 行{row} 列{col}")
continue
# 处理第二个题目/答案(表格3)
table2 = doc.tables[3]
N = data['N2'] if doc_type == '答案' else None
G = data['G2']
C1 = data['C1_2']
# 写入第二个表格
for t1 in range(len(bg1)):
pos = bg1[t1]
row, col = int(pos[0]), int(pos[1])
try:
cell = table2.cell(row, col)
cell.paragraphs[0].clear()
if doc_type == '题目':
if C1[t1].strip():
para = cell.paragraphs[0]
for i, char in enumerate(C1[t1].strip()):
run = para.add_run(char)
run.font.color.rgb = DARK_GRAY if i == 0 else LIGHT_GRAY
run.font.name = '华文新魏'
run.font.size = Pt(size)
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
elif doc_type == '答案':
para = cell.paragraphs[0]
room_num = N[t1]
for i, char in enumerate(room_num):
run = para.add_run(char)
run.font.color.rgb = DARK_GRAY if i == 0 else LIGHT_GRAY
run.font.name = '华文新魏'
run.font.size = Pt(size)
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
if room_num in G:
shading = parse_xml(
f'<w:shd xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" '
f'w:fill="c0c0c0"/>'
)
cell._tc.get_or_add_tcPr().append(shading)
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
except IndexError:
print(f"跳过不存在的单元格: 表格3 行{row} 列{col}")
continue
# 题目文档写入粘贴数字(第二个题目)
if doc_type == '题目':
for t2 in range(min(len(G), len(paste_positions))):
pos = paste_positions[t2]
row, col = int(pos[0]), int(pos[1])
try:
cell = table2.cell(row, col)
cell.paragraphs[0].clear()
para = cell.paragraphs[0]
for i, char in enumerate(G[t2]):
run = para.add_run(char)
run.font.color.rgb = DARK_GRAY if i == 0 else LIGHT_GRAY
run.font.name = '华文新魏'
run.font.size = Pt(size)
run.font.underline = True
run.font.bold = True
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
shading = parse_xml(
f'<w:shd xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" '
f'w:fill="c0c0c0"/>'
)
cell._tc.get_or_add_tcPr().append(shading)
except IndexError:
print(f"跳过不存在的粘贴单元格: 表格3 行{row} 列{col}")
continue
# 设置楼层和房间号格式(两个表格都需要设置)
for table in [table1, table2]:
for y2 in range(7):
try:
cell = table.cell(y2, 0)
shading = parse_xml(
f'<w:shd xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" '
f'w:fill="d3d3d3"/>'
)
cell._tc.get_or_add_tcPr().append(shading)
cell.paragraphs[0].clear()
para = cell.paragraphs[0]
run = para.add_run(str(6-y2) if (6-y2) != 0 else '')
run.font.name = '华文新魏'
run.font.size = Pt(size)
run.font.color.rgb = DARK_GRAY
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
except IndexError:
print(f"跳过不存在的楼层单元格: 行{y2} 列0")
continue
for y3 in range(1, 3):
try:
cell = table.cell(6, y3)
shading = parse_xml(
f'<w:shd xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" '
f'w:fill="d3d3d3"/>'
)
cell._tc.get_or_add_tcPr().append(shading)
cell.paragraphs[0].clear()
para = cell.paragraphs[0]
run = para.add_run(f"{y3:02d}室")
run.font.name = '华文新魏'
run.font.size = Pt(size)
run.font.color.rgb = LIGHT_GRAY
run._element.rPr.rFonts.set(qn('w:eastAsia'), '华文新魏')
para.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
except IndexError:
print(f"跳过不存在的房间号单元格: 行6 列{y3}")
continue
# 保存文档
doc.save(f"{temp_folder}\\{doc_type}_{z+1:02d}.docx")
time.sleep(1)
convert(f"{temp_folder}\\{doc_type}_{z+1:02d}.docx", f"{temp_folder}\\{doc_type}_{z+1:02d}.pdf")
time.sleep(1)
# 合并PDF
def merge_pdfs(file_pattern, output_name):
pdfs = sorted([f for f in os.listdir(temp_folder) if f.startswith(file_pattern) and f.endswith('.pdf')])
if not pdfs:
return
merger = PdfFileMerger()
for pdf in pdfs:
merger.append(os.path.join(temp_folder, pdf))
output_path = os.path.join(path, f"0302_门牌号_{height1}乘{weight1}每行1空_{output_name}_共{n}份.pdf")
merger.write(output_path)
merger.close()
print(f"已生成: {output_path}")
merge_pdfs("题目", "01题目版")
merge_pdfs("答案", "02答案版")
# 清理临时文件
shutil.rmtree(temp_folder)
print("操作完成!")
运行35份,实际取整34,一页两份就是17页
题目和答案是匹配的
感悟:
1、用多个AI编程工具(deep seek、豆包、星火讯飞)综合编程(写不出就换一个工具继续写),输入中文的需求内容,让AI编程来编写,能提供多种思路。实现更优质的结果。
2、但是页更加深刻地感到自己地编程能力弱化,有时候AI只提供了关键点修改的部分代码,但我不知道要插在哪里,还是让它给我“全部代码”,这就增加编写的时长,需要几分钟的等候。
3、用AI写编程代码是唯一的手段,已经无可避免依赖它,而失去了自己思考的能力。