通过word表格单元格的索引取值,实现了对”练练看“的各种模板的配对图形(组)的输入。
因此将第二套题目位置上的图案全部删除,留空白。
新建并插入表格,合并表格
设置布局高度
设置灰色1磅框线+部分框线隐藏
制作粗线分割线
画一个大框粗线,中间的粗线
文字位置设置
图案布局位置:(因为只有1套题目,只需要第1行置顶居中)
模板样式:
- '''
- 作者:阿夏
- 时间:2022年11月7日连连看(A4横板)8*4,1套连线,1套自绘)
- (A4横排8*4张表格框横向中间横剪切))
- '''
-
- import os
-
- num=int(input('生成多少份\n'))
- Number=int(input('每页制作多少个(16个)\n'))
- size=int(input('图案大小(8*2 建议60)\n'))
- length=int(input('表格长度(8格)\n'))
- weight=int(input('表格宽度(2格)\n'))
-
- print('----------第1步:提取所有图案------------')
- list=['✿','☸','✪','☁','➹','✈','☂','☃','◐','☼','☯','◎','❤','♨','☋','♘','★','♫','❀','〼','✉','☏','♕','♖']
-
- print(len(list))# 一共24个图案
-
- print('----------第2步:新建一个临时文件夹------------')
- # 新建一个”装N份word和PDF“的文件夹
- os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\连连看\零时Word')
-
-
- print('----------第3步:随机抽取8个不重复的图案 ------------')
- import random
- from win32com.client import constants,gencache
- from win32com.client.gencache import EnsureDispatch
- from win32com.client import constants # 导入枚举常数模块
- import os,time
-
- import docx
- from docx import Document
- from docx.shared import Pt
- from docx.shared import RGBColor
- from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
- from docx.oxml.ns import qn
-
-
- from docxtpl import DocxTemplate
- import pandas as pd
- from docx2pdf import convert
- from docx.shared import RGBColor
-
- for z in range(0,num): #多少份
- # word = gencache.EnsureDispatch('Word.Application')
- doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\连连看\练练看框架模板(自制).docx')
- table = doc.tables[0]
- # 先随机抽取8个一列
- all=[]
- n1=[]
- n2=[]
- n3=[]
- n4=[]
- n = random.sample(list, Number) # 24个里面随机抽取16个放入一个组nn
- # print(n)
-
- # 第1行:
- # 第1行:
- for n1 in n[0:int(Number/2)]: # 16个里面的1-8个,提取单独数
- n3.append(n1)
- all.append(n1) # 第1轮8个添入总列表 (插入Word第1行)
-
- # 第2行:
- o1 = random.sample(n3, int(Number/2)) # 第1轮8个再随机打乱一次,不重复抽取
- for b in o1:
- all.append(b)#第1轮8个乱序排列不重复(插入Word第2行)
- print(all)
-
- # # 第3行:
- # for n2 in n[int(Number/2):Number]: #16个里面的9-16个,提取单独数
- # n4.append(n2)
- # all.append(n2) # 做第4列的乱序用
-
- # # 第4行:
- # o2 = random.sample(n4, int(Number/2)) # 第2轮8个再随机打乱一次,不重复抽取
- # for b in o2:
- # all.append(b)#第2轮8个乱序排列不重复(插入Word第4列)
- # print(all)
- # ['☃', '〼', '❤', '♕', '♫', '✈', '✿', '☸', '♫', '❤', '〼', '✈', '☃', '✿', '♕', '☸', '✪', '☁', '✉', '◎', '♖', '☼', '★', '☋', '♖', '☁', '☼', '☋', '✉', '◎', '✪', '★']
-
- # 确定8*4表格的表格单元格坐标(如第1行第1格是0,0 ,第2行第3格是(1,2)
- bg=[]
- for x in range(0,weight):
- for y in range(0,length):
- ww='{}{}'.format(x,y)
- bg.append(ww)
- print(bg)
- # ['00', '01', '02', '03', '04', '05', '06', '07', '10', '11', '12', '13', '14', '15', '16', '17', '20', '21', '22', '23', '24', '25', '26', '27', '30', '31', '32', '33', '34', '35', '36', '37']
-
- # 提取表格单元格坐标和图形的坐标
- for t in range(0,len(all)): # 图案的长度为8*4=32个 遍历0-32(32个)
- pp=int(bg[t][0]) # 提取表格bg里面每个元素的第0个数字==单元格X坐标 t=索引数字
- qq=int(bg[t][1]) # 提取表格bg里面每个元素的第1个数字==单元格Y坐标 t=索引数字
- k=all[t] # 提取all图案列表里面每个图形 t=索引数字
-
- run=table.cell(pp,qq).paragraphs[0].add_run(k) # 在单元格0,0(第1行第1列)输入第0个图图案
- run.font.name = '黑体'#输入时默认华文琥珀字体
- run.font.size = Pt(size) #输入字体大小默认30号
- run.font.color.rgb = RGBColor(200,200,200) #设置颜色浅灰
- r = run._element
- r.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷
- table.cell(pp,qq).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中
-
- doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\连连看\零时Word\{}.docx'.format('%02d'%(z+1)))#保存为XX学号的电话号码word
-
- from docx2pdf import convert
- # docx 文件另存为PDF文件
- inputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/连连看/零时Word/{}.docx".format('%02d'%(z+1))# 要转换的文件:已存在
- outputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/连连看/零时Word/{}.pdf".format('%02d'%(z+1)) # 要生成的文件:不存在
- # 先创建 不存在的 文件
- f1 = open(outputFile, 'w')
- f1.close()
- # 再转换往PDF中写入内容
- convert(inputFile, outputFile)
-
- print('----------第4步:把都有PDF合并为一个打印用PDF------------')
-
- # 多个PDF合并(CSDN博主「红色小小螃蟹」,https://blog.csdn.net/yangcunbiao/article/details/125248205)
- import os
- from PyPDF2 import PdfFileMerger
- target_path = 'C:/Users/jg2yXRZ/OneDrive/桌面/连连看/零时Word'
- pdf_lst = [f for f in os.listdir(target_path) if f.endswith('.pdf')]
- pdf_lst = [os.path.join(target_path, filename) for filename in pdf_lst]
- pdf_lst.sort()
- file_merger = PdfFileMerger()
- for pdf in pdf_lst:
- print(pdf)
- file_merger.append(pdf)
- file_merger.write("C:/Users/jg2yXRZ/OneDrive/桌面/连连看/(打印合集)横版合并代码(自制) 连连看{}乘{}({}份).pdf".format(length,weight,num))
- file_merger.close()
- # doc.Close()
-
- # # print('----------第5步:删除临时文件夹------------')
- import shutil
- shutil.rmtree('C:/Users/jg2yXRZ/OneDrive/桌面/连连看/零时Word') #递归删除文件夹,即:删除非空文件夹
-
终端运行
图案列表的数量(只要两行8*2个=16个,隐藏第3-4列)
图案列表的生成Word表格单元格坐标(XY)的索引数的生成(只有两行)
如何将单个图案输入到指定的Word表格单元格内
灰色1磅框线,可以让幼儿知道图案所处位置空间,从而能控制图案的大小。画一样的2个图案对幼儿来说有挑战。
引导幼儿产生先写个人信息的意识(不写名字和学号,就是0分,没有学号名字,这张纸就没法回到你的手里了!)
教学活动照片展示: