效果展示
1、适合中班默写学号——有姓名 有班级,无学号,适合中班幼儿
2、适合大班幼儿默写名字——有学号,有班级,无姓名,
适合初学者描字(小班、中班、大班)——名字、学号、班级都有(适合不会写的孩子描画名字、学号、班级)
背景需求:
昨天去中班带班,今天遇到这个中班的班主任。
“你有没有数学相关的打印的材料,就像昨天那种连连看一样的东西。我们孩子数学能力弱,计划里写的弱势项目,但是学习材料包上页就一点点数的东西,你有类似的学习材料”
她提出想要“数学类”的之类学具,比如ABCABC排序,我很高兴,用电脑展示了《彩色条》《数字卡》和《破译电话号码》
“ABAB涂色行吗?”“还有数字卡片”
中班老师连连说好,立马并对破译电话号码非常刚兴趣,要求最好破译电话号码用“图案”(不要数学加减法题)
我立马用UIBOT下载了他们班幼儿家长的手机号码,然后快速批量一套中班的《破译电话号码》。
由于一年没有用,调试半天都是报错,最终发现其中有些参数需要手动调整,我已经忘记好修改里面的某些参数了。为了方便一些,我搞了三个If。实现“姓名、学号、班级”任意出现。
终端输入:,
'''
作者:阿夏
时间:2023年3月2日 破译电话号码-图形版-学号和班级(不需要分列,直接导入word)
'''
import openpyxl
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
import osclassroom=input('班级名称(如中1)\n')
bao1=int(input('需要保留名字吗?是=1,否=2\n'))
bao2=int(input('需要保留学号吗?是=1,否=2\n'))
bao3=int(input('需要保留班级吗?是=1,否=2\n'))print('----------第2步:新建一个临时文件夹------------')
# 新建一个”装N份word和PDF“的文件夹
os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\零时Word')print('------------读取excle表单--------------')
wb = openpyxl.load_workbook(r'C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\家长电话号码.xlsx')# wb=用openpyxl打开存有号码的ExcelEx
phone = wb.active #phone=获取wb里面的数据print('------------读取 爸爸的手机号--------------')
symbol_1=['●','●','●', '●', '●', '●','●', '●','●','●','●']
father=[]
for i in list(phone.columns)[4]:# 第3列是爸爸的手机号 phonestr = str(i.value)# 电话字符串 = 第二列的数字的值的字符串形式print(phonestr)# 打印电话字符串# Phonenum1# 13512345678# 16556345690# 13724680156print('------------ 爸爸的手机号的数字全部写在一起--------------')col = 0 # for k in phonestr:# 在电话字符串里面循环遍历 取各种数字if i.value!= 'Phonenum1':# 如果电话号码的值不等于'dad' 不要第一行C1if int(k) != 0:# 如果取出的数字不等于0 等于1-9str_temp =int(k) * symbol_1[col]# 结果等于 取出的数字的整数 乘以 符号列表的相应列数的符号(批量几个符号)else:# 如果取出的数字=于0str_temp = '零'# 0=零# print( str_temp)father.append(str_temp) col +=1
print(father)
['●', '●●●', '●●●●●', '●', '●●', '●●●', '●●●●', '●●●●●', '●●●●●●', '●●●●●●●', '●●●●●●●●', '●', '●●●●●●', '●●●●●', '●●●●●', '●●●●●●', '●●●', '●●●●', '●●●●●', '●●●●●●', '●●●●●●●●●', '零', '●', '●●●', '●●●●●●●', '●●', '●●●●', '●●●●●●', '●●●●●●●●', '零', '●', '●●●●●', '●●●●●●']print('------------读取 妈妈的手机号--------------')
mother=[]
symbol_2 = ['▲','▼','●','♦','■','▶','◀','◣','◥','◤','◢']#
for j in list(phone.columns)[6]:phonestr = str(j.value)print(phonestr)# Phonenum2# 13214562358# 15615617891# 13123568210print('------------ 妈妈的手机号的数字全部写在一起--------------')col = 0# 第一个字符串的起始列 123数下去 mum电话的第一位数在第O列=15列for _ in phonestr[:]:if j.value != 'Phonenum2':if int(_) != 0:str_temp = int(_) * symbol_2 [col] else:str_temp = '零'mother.append(str_temp) col +=1
print(mother)
# ['▲', '▼▼▼', '●●', '♦', '■■■■', '▶▶▶▶▶', '◀◀◀◀◀◀', '◣◣', '◥◥◥', '◤◤◤◤◤', '◢◢◢◢◢◢◢◢', '▲', '▼▼▼▼▼', '●●●●●●', '♦', '■■■■■', '▶▶▶▶▶▶', '◀', '◣◣◣◣◣◣◣', '◥◥◥◥◥◥◥◥', '◤◤◤◤◤◤◤◤◤', '◢', '▲', '▼▼▼', '●', '♦♦', '■■■', '▶▶▶▶▶', '◀◀◀◀◀◀', '◣◣◣◣◣◣◣◣', '◥◥', '◤', '零']print('------------ 爸爸的手机号拆开成11个一组的列表--------------')
father_all=[]
for i in range(0,int(len(father)/11)):b=father[i*11:i*11+11]father_all.append(b)
print(father_all)
# [['●', '●●●', '●●●●●', '●', '●●', '●●●', '●●●●', '●●●●●', '●●●●●●', '●●●●●●●', '●●●●●●●●'], # ['●', '●●●●●●', '●●●●●', '●●●●●', '●●●●●●', '●●●', '●●●●', '●●●●●', '●●●●●●', '●●●●●●●●●', '零'],['●', '●●●', '●●●●●●●', '●●', '●●●●', '●●●●●●', '●●●●●●●●', '零', '●', '●●●●●', '●●●●●●']]print('------------ 妈妈的手机号拆开成11个一组的列表--------------')
mother_all=[]
for i in range(0,int(len(mother)/11)):b=mother[i*11:i*11+11]mother_all.append(b)
print(mother_all)
# [['▲', '▼▼▼', '●●', '♦', '■■■■', '▶▶▶▶▶', '◀◀◀◀◀◀', '◣◣', '◥◥◥', '◤◤◤◤◤', '◢◢◢◢◢◢◢◢'],
# ['▲', '▼▼▼▼▼', '●●●●●●', '♦', '■■■■■', '▶▶▶▶▶▶', '◀', '◣◣◣◣◣◣◣', '◥◥◥◥◥◥◥◥', '◤◤◤◤◤◤◤◤◤', '◢'],
# ['▲', '▼▼▼', '●', '♦♦', '■■■', '▶▶▶▶▶', '◀◀◀◀◀◀', '◣◣◣◣◣◣◣◣', '◥◥', '◤', '零']]if bao1==1 and bao3==1: # 需要姓名和班级 info='姓名+班级'print('------------读取 学号或者姓名--------------')N=[]for i in list(phone.columns)[2]:# 学号-0 姓名2 phonestr = str(i.value)# 电话字符串 = 第二列的数字的值的字符串形式N.append(phonestr)print(N)# ['N', '1', '11', '24']print('------------读取 班级--------------')C=[]for i in list(phone.columns)[1]:# phonestr = str(i.value)# 电话字符串 = 第二列的数字的值的字符串形式C.append(phonestr)print(C)#['CLASS', '大七班', '大七班', '大七班'] print('------------ 数据导入word,字体设置--------------')from docxtpl import DocxTemplateimport pandas as pdfrom docx2pdf import convertfrom docx.shared import RGBColorfor y in range(0,int(len(father)/11)): doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\破译电话号码模板(图案).docx') wb = pd.read_excel(r'C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\家长电话号码.xlsx') table = doc.tables[0] print('------------学号\班级写入,字体设置--------------')n=N[y+1]run=table.cell(0,2).paragraphs[0].add_run(n) # 这里的可以代表学号或者名字,把上面连接的数字改掉 姓名02 学号06 班级08(下面的数字也要改)run.font.name = '黑体'#输入时默认华文琥珀字体run.font.color.rgb = RGBColor(220,220,220) #设置颜色浅灰run.font.size = Pt(45) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(0,2).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中c=C[y+1]run=table.cell(0,8).paragraphs[0].add_run(c) # 班级08run.font.name = '黑体'#输入时默认华文琥珀字体run.font.color.rgb = RGBColor(220,220,220) #设置颜色浅灰run.font.size = Pt(45) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(0,8).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中for nn in range(0,11):print('------------ 爸爸的手机号写入不同的word,字体设置--------------')f=father_all[y][nn] print(f) run=table.cell(2,nn).paragraphs[0].add_run(f) # 在第该表格3行1列的单元格内输入“xxxx”run.font.name = '黑体'#输入时默认华文琥珀字体run.font.size = Pt(16) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(2,nn).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中print('------------ 妈妈的手机号写入不同的word,字体设置--------------')g=mother_all[y][nn] print(g) run=table.cell(5,nn).paragraphs[0].add_run(g) # 在第该表格3行1列的单元格内输入“xxxx”run.font.name = '黑体'#输入时默认华文琥珀字体run.font.size = Pt(18) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(5,nn).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中 doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\零时Word\{}.docx'.format('%02d'%(y+1)))#保存为XX学号的电话号码word # docx 文件另存为PDF文件inputFile = r"C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\零时Word\{}.docx".format('%02d'%(y+1)) # 要转换的文件:已存在outputFile = r"C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\零时Word\{}.pdf".format('%02d'%(y+1)) # 要生成的文件:不存在# 先创建 不存在的 文件f1 = open(outputFile, 'w')f1.close()# 再转换往PDF中写入内容convert(inputFile, outputFile)if bao2==1 and bao3==1: # 需要学号和班级info='学号+班级'print('------------读取 学号或者姓名--------------')N=[]for i in list(phone.columns)[0]:# 学号-0 姓名2 phonestr = str(i.value)# 电话字符串 = 第二列的数字的值的字符串形式N.append(phonestr)print(N)# ['N', '1', '11', '24']print('------------读取 班级--------------')C=[]for i in list(phone.columns)[1]:# phonestr = str(i.value)# 电话字符串 = 第二列的数字的值的字符串形式C.append(phonestr)print(C)#['CLASS', '大七班', '大七班', '大七班'] print('------------ 数据导入word,字体设置--------------')from docxtpl import DocxTemplateimport pandas as pdfrom docx2pdf import convertfrom docx.shared import RGBColorfor y in range(0,int(len(father)/11)): doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\破译电话号码模板(图案).docx') wb = pd.read_excel(r'C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\家长电话号码.xlsx') table = doc.tables[0] print('------------学号\班级写入,字体设置--------------')n=N[y+1]run=table.cell(0,6).paragraphs[0].add_run(n) # 这里的可以代表学号或者名字,把上面连接的数字改掉 姓名02 学号06 班级08(下面的数字也要改)run.font.name = '黑体'#输入时默认华文琥珀字体run.font.color.rgb = RGBColor(220,220,220) #设置颜色浅灰run.font.size = Pt(45) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(0,6).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中c=C[y+1]run=table.cell(0,8).paragraphs[0].add_run(c) # 班级08run.font.name = '黑体'#输入时默认华文琥珀字体run.font.color.rgb = RGBColor(220,220,220) #设置颜色浅灰run.font.size = Pt(45) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(0,8).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中for nn in range(0,11):print('------------ 爸爸的手机号写入不同的word,字体设置--------------')f=father_all[y][nn] print(f) run=table.cell(2,nn).paragraphs[0].add_run(f) # 在第该表格3行1列的单元格内输入“xxxx”run.font.name = '黑体'#输入时默认华文琥珀字体run.font.size = Pt(16) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(2,nn).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中print('------------ 妈妈的手机号写入不同的word,字体设置--------------')g=mother_all[y][nn] print(g) run=table.cell(5,nn).paragraphs[0].add_run(g) # 在第该表格3行1列的单元格内输入“xxxx”run.font.name = '黑体'#输入时默认华文琥珀字体run.font.size = Pt(18) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(5,nn).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中 doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\零时Word\{}.docx'.format('%02d'%(y+1)))#保存为XX学号的电话号码word # docx 文件另存为PDF文件inputFile = r"C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\零时Word\{}.docx".format('%02d'%(y+1)) # 要转换的文件:已存在outputFile = r"C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\零时Word\{}.pdf".format('%02d'%(y+1)) # 要生成的文件:不存在# 先创建 不存在的 文件f1 = open(outputFile, 'w')f1.close()# 再转换往PDF中写入内容convert(inputFile, outputFile)if bao1==1 and bao2==1 and bao3==1: # 三个信息都有info='姓名+学号+班级'print('------------读取 学号-------------')N=[]for i in list(phone.columns)[0]:# 学号-0 姓名2 phonestr = str(i.value)# 电话字符串 = 第二列的数字的值的字符串形式N.append(phonestr)print(N)# ['N', '1', '11', '24']print('------------读取 学号姓名--------------')Num=[]for i in list(phone.columns)[2]:# 学号-0 姓名2 phonestr = str(i.value)# 电话字符串 = 第二列的数字的值的字符串形式Num.append(phonestr)print(N)# ['N', '1', '11', '24']print('------------读取 班级--------------')C=[]for i in list(phone.columns)[1]:# phonestr = str(i.value)# 电话字符串 = 第二列的数字的值的字符串形式C.append(phonestr)print(C)#['CLASS', '大七班', '大七班', '大七班'] print('------------ 数据导入word,字体设置--------------')from docxtpl import DocxTemplateimport pandas as pdfrom docx2pdf import convertfrom docx.shared import RGBColorfor y in range(0,int(len(father)/11)): doc = Document(r'C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\破译电话号码模板(图案).docx') wb = pd.read_excel(r'C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\家长电话号码.xlsx') table = doc.tables[0] print('------------学号\班级写入,字体设置--------------')n=N[y+1]run=table.cell(0,6).paragraphs[0].add_run(n) # 这里的可以代表学号或者名字,把上面连接的数字改掉 姓名02 学号06 班级08(下面的数字也要改)run.font.name = '黑体'#输入时默认华文琥珀字体run.font.color.rgb = RGBColor(220,220,220) #设置颜色浅灰run.font.size = Pt(45) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(0,6).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中num=Num[y+1]run=table.cell(0,2).paragraphs[0].add_run(n) # 这里的可以代表学号或者名字,把上面连接的数字改掉 姓名02 学号06 班级08(下面的数字也要改)run.font.name = '黑体'#输入时默认华文琥珀字体run.font.color.rgb = RGBColor(220,220,220) #设置颜色浅灰run.font.size = Pt(45) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(0,2).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中c=C[y+1]run=table.cell(0,8).paragraphs[0].add_run(c) # 班级08run.font.name = '黑体'#输入时默认华文琥珀字体run.font.color.rgb = RGBColor(220,220,220) #设置颜色浅灰run.font.size = Pt(45) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(0,8).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中for nn in range(0,11):print('------------ 爸爸的手机号写入不同的word,字体设置--------------')f=father_all[y][nn] print(f) run=table.cell(2,nn).paragraphs[0].add_run(f) # 在第该表格3行1列的单元格内输入“xxxx”run.font.name = '黑体'#输入时默认华文琥珀字体run.font.size = Pt(16) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(2,nn).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中print('------------ 妈妈的手机号写入不同的word,字体设置--------------')g=mother_all[y][nn] print(g) run=table.cell(5,nn).paragraphs[0].add_run(g) # 在第该表格3行1列的单元格内输入“xxxx”run.font.name = '黑体'#输入时默认华文琥珀字体run.font.size = Pt(18) #输入字体大小默认30号r = run._elementr.rPr.rFonts.set(qn('w:eastAsia'), '黑体')#将输入语句中的中文部分字体变为华文行楷table.cell(5,nn).paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER #居中 doc.save(r'C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\零时Word\{}.docx'.format('%02d'%(y+1)))#保存为XX学号的电话号码word # docx 文件另存为PDF文件inputFile = r"C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\零时Word\{}.docx".format('%02d'%(y+1)) # 要转换的文件:已存在outputFile = r"C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\零时Word\{}.pdf".format('%02d'%(y+1)) # 要生成的文件:不存在# 先创建 不存在的 文件f1 = open(outputFile, 'w')f1.close()# 再转换往PDF中写入内容convert(inputFile, outputFile)else:passprint('----------第4步:把都有PDF合并为一个打印用PDF------------')# 多个PDF合并(CSDN博主「红色小小螃蟹」,https://blog.csdn.net/yangcunbiao/article/details/125248205)
import os
from PyPDF2 import PdfFileMerger
target_path = r"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(r"C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\(打印合集)破译电话号码-图案版({})-{}班-{}份.pdf".format(info,classroom,int(len(father)/11)))
file_merger.close()
# doc.Close()print('----------第5步:删除临时文件夹------------')
import shutil
shutil.rmtree(r"C:\Users\jg2yXRZ\OneDrive\桌面\破译电话号码\零时Word") #递归删除文件夹,即:删除非空文件夹
分析:
应该用Def函数把相似部分包在一起,缩短代码长度,但是水平有限,怕搞不清内容,还是用了机械办法罗列。
效果展示
三份打印合集(适合不同水平的幼儿)
1、适合中班默写学号——有姓名 有班级,无学号,适合中班幼儿
2、适合大班幼儿默写名字——有学号,有班级,无姓名,
适合初学者描字(小班、中班、大班)——名字、学号、班级都有(适合不会写的孩子描画名字、学号、班级)
使用情况:
发送给需求者。她还提出还需要一些”ABC排序“的学具(花朵、房屋、玩具、数字的排序)
感悟:
如果我的Python自制学具能够用于更多的教学情景,服务与更多的教师,才是真正的”实用“
(CSDN新版用起来很不习惯啊)