• 【教学类-15-01】20221115《学号(姓名)描字帖-A4横版-竖切》(中班)


      效果展示

     

     浅蓝色打印纸(灰色字体)

     背景需求:

            

           在中3班的Python学具实验中,发现至少有3位幼儿明确表示自己不会写学号,还有3位幼儿书写的学号是镜像字(两个数字位置互换、两个数字都左右镜像、2和5上下镜像等)。

          前期我有一套描字帖代码,是从TXT里导出幼儿的学号名字,批量生成A4的幼儿描字帖。在掌握列表取值的方法后,我希望这一次制作描字帖能从Excel导入幼儿学号和名字。

            考虑到幼儿的书写速度,整张A4的书写量比较适合大班,中班就用半张A4的数字量。这种情况下,一页需要用到两个学号和两个名字。也就是所有30位幼儿的描字贴都都在一个word横板文档中(30人可以分成15张A4)

            不仅适合幼儿操作(6人桌操作空间优先,作业纸不能太大),还能节约纸张(最近都在用浅蓝色的空白打印纸,不是废纸,用起来有点浪费)

    文件设置:

    (一)文件位置

      (二)Word模板

    页眉设置 

    分栏2栏(一页两个人的信息)

    第一个光标的段间距

    其他都不用设置 

    输入的名字、学号的字体、间距、颜色等在py代码里设置。

    (三)EXCEL

     

    代码呈现

    py代码可以存放再任意位置,因为所有文件路径都是已经全部写在代码里。

    1. '''
    2. 作者:阿夏
    3. 时间:2022年11月14日
    4. 名称:大班学具:中班学号描字帖,两人一份,写在一个word里)
    5. '''
    6. import xlwt
    7. import xlrd
    8. import os
    9. import random
    10. from win32com.client import constants,gencache
    11. from win32com.client.gencache import EnsureDispatch
    12. from win32com.client import constants # 导入枚举常数模块
    13. import os,time
    14. import docx
    15. from docx import Document
    16. from docx.shared import Pt
    17. from docx.shared import RGBColor
    18. from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
    19. from docx.oxml.ns import qn
    20. # banji=input('请输入班级(大1)\n')
    21. print('----------第1步:新建一个临时文件夹------------')
    22. # 新建一个”装N份word和PDF“的文件夹
    23. # os.mkdir(r'C:\Users\jg2yXRZ\OneDrive\桌面\描字贴\零时Word')
    24. # doc= docx.Document(r"C:\Users\jg2yXRZ\OneDrive\桌面\描字贴\打印合集描字贴.docx")# 新建Word
    25. doc = docx.Document(r"C:\Users\jg2yXRZ\OneDrive\桌面\描字帖\学生名单.docx")
    26. wb= xlrd.open_workbook(r"C:\Users\jg2yXRZ\OneDrive\桌面\描字帖\学生名单.xlsx") #打开文件并返回一个工作蒲对象。open_workbook可以点进去看看函数里面的参数的含义之类的,很详细,英语不好的可以百度翻译,翻译出来的结果差不多。
    27. sheet=wb.sheet_by_index(0) #通过索引的方式获取到某一个sheet,现在是获取的第一个sheet页,也可以通过sheet的名称进行获取,sheet_by_name('sheet名称')
    28. col1=sheet.col_values(0)# 学号
    29. col2=sheet.col_values(1)# 名字
    30. num=len(col1)-1 # 第一列去掉第一行
    31. ls=[]
    32. nb=[]
    33. nb2=[]
    34. # 生成 基本组:“学号+名字“
    35. for i in range(1,len(col1)):
    36. name='{}{}'.format ('%02d'%int(col1[i]),col2[i]) #吧学号和名字拼在一起, 01张三
    37. name2='{} {} '.format (name,name)
    38. ls.append(name2) # 生成第一行信息['01张三 01张三 ],正好摆一行
    39. print(ls)
    40. # 提取基本组:“学号”
    41. for i in range(1,len(col1)):
    42. number=str('%02d'%col1[i]) # ['01', '02', '03', '04', '05', ……]
    43. nb.append(number)
    44. print(nb)
    45. # 把学号批量6个,组成6个一组,正好摆一行
    46. for xx in range(0,len(nb)):
    47. # c=nb[xx]
    48. d='{} {} {} {} {} {}'.format(nb[xx],nb[xx],nb[xx],nb[xx],nb[xx],nb[xx])
    49. # ['01 01 01 01 01 01', '02 02 02 02 02 02', '03 03 03 03 03 03', '04 04 04 04 04 04', ……]
    50. nb2.append(d)
    51. print(nb2)
    52. # 把['01张三 01张三 ]复制2次,正好在第1、2行
    53. # 把['01 01 01 01 01 01', 复制5次,正好摆在3,4,5,6,7行上.
    54. lists=[]
    55. for k1 in range(0,len(ls)):
    56. for j in range(2): # 1行2个学号名字,一共2行
    57. lists.append(ls[k1])
    58. for l in range(0,5): # 1行6个学号名字,一共4行
    59. lists.append(nb2[k1])
    60. print(lists)
    61. for i in range(0,len(lists)):
    62. doc.add_paragraph(lists[i])
    63. # 字体这一段一定要再写一次
    64. for paragraph in doc.paragraphs:
    65. for run in paragraph.runs:
    66. run.font.size = Pt(35) # 数字题目字体大小
    67. run.font.bold = False #数字题目字体是否加粗 不加粗,5*8再加粗比较满,压抑了
    68. run.font.name = 'Arial' # 控制是英文时的字体
    69. run.element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑') # 控制数字是中文时的字体
    70. # paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT # 设置数字页眉居中对齐
    71. paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置数字页眉居中对齐
    72. run.font.color.rgb = RGBColor(200,200,200) #设置颜色浅灰
    73. # paragraph.paragraph_format.line_spacing=1.5 #数字中文字的段行距
    74. paragraph.paragraph_format.line_spacing = Pt(60) #数字段间距
    75. # 设置主要页边距 5
    76. from docx.shared import Cm # 导入cm模块
    77. doc.sections[0].top_margin = Cm(1)# sections[1]是第二节=第二页 上边距
    78. doc.sections[0].bottom_margin = Cm(1)# sections[1]是第二节=第二页 下边距
    79. doc.sections[0].left_margin = Cm(1) # sections[1]是第二节=第二页 左边距
    80. doc.sections[0].right_margin = Cm(1)# sections[1]是第二节=第二页 右边距
    81. # 设置其他页边距
    82. doc.sections[0].gutter=Cm(0)# sections[1]是第二节=第二页 装订线 默认为0 左
    83. doc.sections[0].header_distance=Cm(0.8)# sections[1]是第二节=第二页 页眉边距
    84. doc.sections[0].footer_distance=Cm(1.3)# sections[1]是第二节=第二页 页脚边距
    85. # 装订线还有一个位置属性,暂时未发现如何设置,默认为左,如果需求设置成右,可以建个模板docx文档导入。
    86. # 设置纸张方向和大小 LANDSCAPE=横 PORTRAIT纵 默认信纸 纵
    87. from docx.shared import Cm # 导入CM #
    88. from docx.enum.section import WD_ORIENTATION # 导入纸张方向
    89. doc.sections[0].page_height = Cm(21) # 设置A4纸的高度
    90. doc.sections[0].page_width = Cm(29.7) # 设置A4纸的宽
    91. doc.sections[0].orientation = WD_ORIENTATION.LANDSCAPE # 设置纸张方向为横向 L 
    92. # 设置分栏 如果不要,就把数字该为为1
    93. from docx.oxml.ns import qn
    94. doc.sections[0]._sectPr.xpath('./w:cols')[0].set(qn('w:num'), '2') #把第二节页设置为2栏
    95. doc.save(r"C:\Users\jg2yXRZ\OneDrive\桌面\描字帖\中三班A4一半描字帖一行计算{}人.docx".format(num))
    96. from docx2pdf import convert
    97. # docx 文件另存为PDF文件
    98. inputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/描字帖/中三班A4一半描字帖一行计算{}人.docx".format(num)# 要转换的文件:已存在
    99. outputFile = r"C:/Users/jg2yXRZ/OneDrive/桌面/描字帖/中三班A4一半描字帖一行计算{}人.pdf".format(num) # 要生成的文件:不存在
    100. # 先创建 不存在的 文件
    101. f1 = open(outputFile, 'w')
    102. f1.close()
    103. # 再转换往PDF中写入内容
    104. convert(inputFile, outputFile)

    运行输入

      只要运行,不需要输入任何信息

    最后生成一个“中三班A4一半描字帖一行计算6人.pdf”

      

    重点解析:

    如何从excle里抽取列数据 把“学号姓名”“学号”的基本列表做好,并全部加入到lists列表中。

    学号名字描字贴的字体(颜色为200,200,200中灰色)

    教学过程:

    中3班    2022年11月25日  6人

    部分幼儿选择练习描学号,其他会写学号的中3班幼儿不用练习。

    4人位男孩和1位女孩主动搜索自己的描字帖(28号14号17号16号5号)24号男孩不会画学号也没有选择任何教具,教师单独与其交流,并鼓励他进行描画练习。 6位描字帖的孩子中,可以看到一个特点:

    无描字经验:

    第1位幼儿24号,前期没有描学号的任何经验,数字跳着写。每个数字的绘画顺序是从右向左(先4后2),先下后上(4:先画竖线,且从下向上画竖线,从右向左画横斜线,2,从下向上画),由于不知道如何运笔,幼儿画了几个数字后,就不愿意反复练习。

    但是他本人强烈要求直接把”学号纸“带回家给爸爸妈妈看!(通常周五下午统一带回一周所有的作业,我也希望扫描后再发给幼儿),为了激发他的学习兴趣,并引导家长配合在家指导”24“的数字书写,我同意他当天把学号描字帖拿回家。

     

    有描字经验——用铅笔或记号笔描完所有的数字

    第2-6位幼儿,书写顺序基本都是从上到下,从左边到右边。显然已经有描字的经验。1位幼儿(26)直接在姓名位置写上自己的名字。1位幼儿I参照打印的名字,画了自己名字中的部分字和部首。三位幼儿用铅笔或记号笔描画了字帖里的灰色名字(2行4个)。

      

     (为了信息保密,页眉、第1、2行的姓名都打码处理,实际上部分幼儿写了名字和学号)

    感悟:

    1、第一次尝试从EXCEL里面导入列的信息。

    以前都是从TXT,或者直接在py代码里写一个带信息的列表(这种情况,信息少可以,如12个图案符号)。今天终于能够从EXCEL里调用信息,可以对大量信息进行处理(如30人以上班级名单)

    2、对不会写的孩子来说,45的字号有点小。

    考虑对有需求的孩子制作一整套多款式的学号字帖(入5*5个学号、4*5个学号),让幼儿写大字

  • 相关阅读:
    【JAVA并发】一、并发问题产生的根源
    TOOLLLM: FACILITATING LARGE LANGUAGE MODELS TO MASTER 16000+ REAL-WORLD APIS
    Java实现 leetcode-946. 验证栈序列
    C++学习笔记(三十三)
    【VUE】sessionStorage存取对象,解决取值为[object,object]
    hackathon 复盘:niche 海外软件工具正确的方法 6 个步骤
    企业征信牌照9月末盘点:149家机构荣获上榜,西藏等地机构待批
    WPF绘图(图形的效果与变形)
    ModuleNotFoundError: No module named ‘pycocotools‘解决办法
    Petalinux2022 qemu 退出
  • 原文地址:https://blog.csdn.net/reasonsummer/article/details/127885982