【教学类-29-06】20250809灰色门牌号-黏贴版(6层*5间层2间)题目和答案(剪贴卡片)

发布于:2025-08-11 ⋅ 阅读:(17) ⋅ 点赞:(0)

 

 

背景需求:

原来作过一套适合中班操作的门牌号,突出数字差异,一行只贴一个

【教学类-29-04】20250514《门牌号-黏贴版(6层*5间\6层2间)灰底下划线+楼号深黑,房间号浅灰》-CSDN博客文章浏览阅读992次,点赞19次,收藏18次。【教学类-29-04】20250514《门牌号-黏贴版(6层*5间\6层2间)灰底下划线+楼号深黑,房间号浅灰》 https://blog.csdn.net/reasonsummer/article/details/147952023?spm=1011.2415.3001.5331

根据以下代码,制作题目卡和答案卡

【教学类-29-05】20250809灰色门牌号6*5黏贴版(0空2种、5空、10空、15空、20空)题目和答案(剪贴卡片)-CSDN博客文章浏览阅读574次,点赞12次,收藏12次。【教学类-29-05】20250809灰色门牌号6*5黏贴版(0空2种、5空、10空、15空、20空)题目和答案(剪贴卡片) https://blog.csdn.net/reasonsummer/article/details/150070133?spm=1011.2415.3001.5331

设计过程:

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写编程代码是唯一的手段,已经无可避免依赖它,而失去了自己思考的能力。

 


网站公告

今日签到

点亮在社区的每一天
去签到