首页 > 其他分享 >【办公类-54-02】20240827营养员《每周人数统计表》(双休国定假涂成灰色)

【办公类-54-02】20240827营养员《每周人数统计表》(双休国定假涂成灰色)

时间:2024-08-28 17:50:23浏览次数:16  
标签:02 sheet 54 cell ws 双休 new copy 周日

背景需求:

学校食堂的营养员发消息,让我再做一份“总园的每周人数统计”

这是我去年2023年9月份做的,用word制作一页模版,营养员批量打印N张,用了2个学期。

用途就是每个班级来园人数写在空格里,便于营养员统计当天要陪多少菜,每个班级根据人数,称重相应量的饭菜汤。

但是时间久远,原来的word模板模版我早就找不到了。

加上Python技术的深入,我觉得这种需要手动写周次、日期的表格,不规范,也容易填错位置。

我想直接把“周次”“日期”,甚至是每周的“实际工作日”都标出来,进一步方便营养员只填写数字。

前期正好做了一套日历提取

【办公类-53-02】2024年第一学期校历制作(“年月日去0”版、周计划短日期、教案长日期)_word制作校历-CSDN博客文章浏览阅读499次,点赞14次,收藏7次。【办公类-53-02】2024年第一学期校历制作(“年月日去0”版、周计划短日期、教案长日期)_word制作校历https://blog.csdn.net/reasonsummer/article/details/140822416

首先制作一个excle模版

页边距

页眉

不能有表格合并,否则批量后会报错,表格样式变化等情况

代码展示:

'''
营养员的每周人数统计表(20周日期、周次、双休国定假日的表格为灰色)
星火讯飞,阿夏
2024年8月27日
'''


import pandas as pd
import openpyxl
from openpyxl import load_workbook
import copy


print('------------1、读取表格里整理好的周日、日期,列表形式')
path=r'C:\Users\jg2yXRZ\OneDrive\桌面\营养员表格'
# 打开日期工作表
df = pd.read_excel(path+r'\2024学年第一学期校历(最终修改).xlsx')
# 读取周次和日期
col1 = df.iloc[:, 0].tolist()  # 周次,第01周
col2 = df.iloc[:, 2].tolist()  # 日期:2024年9月1日-2024年9月7日

print(col1)
print(col2)

print('2--------- 在同一个工作簿内复制N个周次的工作表')
# 打开模版
wb = load_workbook(path+r'\20240901总园每周人数统计.xlsx')
ws = wb.active

for i in range(len(col1)):
    title = f'总园 每周人数统计 第 {int(col1[i][1:3])} 周 ({col2[i]})'
    # print(title)
    # 写入标题  
    ws['A1'] = title
    # 创造新的标签名
    new_ws = wb.create_sheet(title=col1[i])


    # 复制模版,变成新的工作表
    for row in ws.iter_rows():
        for cell in row:
            new_cell = new_ws[cell.coordinate]
            new_cell.value = cell.value
            if cell.has_style:
                new_cell.font = copy.copy(cell.font)
                new_cell.border = copy.copy(cell.border)
                new_cell.fill = copy.copy(cell.fill)
                new_cell.number_format = copy.copy(cell.number_format)
                new_cell.protection = copy.copy(cell.protection)
                new_cell.alignment = copy.copy(cell.alignment)
        #    单元格高度
            new_ws.row_dimensions[cell.row].height = ws.row_dimensions[cell.row].height
        #  单元格宽度
            new_ws.column_dimensions[openpyxl.utils.get_column_letter(cell.column)].width = ws.column_dimensions[openpyxl.utils.get_column_letter(cell.column)].width

#    页边距
    new_ws.page_margins = copy.copy(ws.page_margins)
        # new_ws.header = copy.copy(ws.header)
        # new_ws.footer = copy.copy(ws.footer)
    
    
   
#    合并第一行
    for sheet in wb:
        # �ϲ�A1��H1��Ԫ��
        sheet.merge_cells('A1:H1')   # �ϲ���Ԫ��

# 删除一个工作表
first_sheet_name = wb.sheetnames[0]
del wb[first_sheet_name]

# 保存新表
wb.save(path+r'\20240901总园每周人数统计2.xlsx')


print('----------3、将周末假日的格子变成灰色') 
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
import itertools

# 读取Excel文件
file_path = path+r'\20240901总园每周人数统计2.xlsx'
xls = pd.ExcelFile(file_path)

# 获取所有工作表名称
sheet_names = xls.sheet_names

# 加载工作簿
workbook = load_workbook(file_path)

# 遍历工作表
for index, sheet_name in enumerate(sheet_names):
    # 如果是第1、6、18张表格,跳过,其他表表都是周日周末灰色
    if index + 1 in [2,3,4,5,6, 18]:
        continue    
    # 获取工作表对象
    sheet = workbook[sheet_name]

    # 定义浅灰色填充样式
    light_gray_fill = PatternFill(start_color='D3D3D3', end_color='D3D3D3', fill_type='solid')

    # 填充指定单元格   
    for row in itertools.chain(range(9, 11), range(19, 21)):
        for col in range(1, 9):
            cell = sheet.cell(row=row, column=col)
            cell.fill = light_gray_fill

    # 第2周 周六上班,周日休息

# 遍历工作表
for index, sheet_name in enumerate(sheet_names):
    # 工作表的索引位置 第2周、第3周、第18周
    b=[2,3,4,5,6,18]

    # 周一到周日那一天休息,就用相应的坐标    
    # 周一=04,14
    # 周二=05,15
    # 周三=06,16
    # 周四=07,17
    # 周五=08,18
    # 周六=09,10
    # 周日=10,20
    
    c=[7,1267,6,234567,17,367] # 第2周的第7天休息、第3周1267天都休息、第18周的367天都休息
    w=[4,5,6,7,8,9,10]
    
    # 只选休息
    # 第2周 周日休息
    # 第3周 周一二休息写入中秋,周六周日休息
    # 第4周 周六休息,周日上班
    # 第5周 周一上班,周二到周日休息,同时写入国庆
    # 第6周 周一休息、周六上班,周日休息
    # 第18周 周三休息、周六周日上班

    for d in range(len(b)):        
        if index + 1 in [b[d]]:
                # 获取工作表对象
            sheet = workbook[sheet_name]

            # 定义浅灰色填充样式
            light_gray_fill = PatternFill(start_color='D3D3D3', end_color='D3D3D3', fill_type='solid')

            # 休息日
            t=str(c[d])
            print(t)
            # 读取每一个第几天
            for tt in t:
                p=int(tt)
                q1=int(w[p-1])
                q2=q1+10
                # 填充指定单元格   (如果是周日,就是10,11  20,21
                # print(f'shuzi{w[p-1]}')
                # print(f'shuzi{w[p-1]}+1')
                for row in itertools.chain(range(q1,q1+1), range(q2, q2+1)):
                    for col in range(1, 9):
                        cell = sheet.cell(row=row, column=col)
                        cell.fill = light_gray_fill

# 保存修改后的Excel文件
workbook.save(file_path)

print('----------4、打开excle另存为PDF(选中所有工作簿,)便于打印') 

代码一共有4步:

1、读取已经制作好的周次和日期(7天全部日期,收尾相连)

2、复制EXCLE模版(包括原来的格式),变成新的工作表和标题

模版没有合并单元格,但是为了标题居中显示,在代码里面合并了第一行的单元格

第3步:对双休日、国定假、调换班进行灰色设置

1.首先查看日历,可以发现大部分周次都是正常的安排(周1-5上班,周67日休息),只有个别的2-6周、18周的工作日比较乱,

跳过特殊的周次,其他周次都是周六周日休息

模版显示,周六的X坐标是9,19,周日的X坐标是10,20

由此,传统的双休日上都被打上灰色,显示不用填写

但是一些特殊周次,需要分析一周七天,到底那几天休息,需要打码灰色

说明:原则上每周第一天从周日开始,但实际我们习惯于从周一开始,周日结束,所以第2周是从黄色9日开始到白色15日结束(15日写在第3周)

第18周是从浅蓝色30日开始到粉色5日结束(5日第19周)

最后结果就是,第2周一天休息,是数字7(周日),第3周有4天休息(周1、周2、周6、周7)以此类推,第5周是国庆节,所以周2、3、4、5、6、7都休息)

前文提到,周六的X在9,19,周日的X在10和20,依次类推一下,周1的X就是4和14,周三的X就是6和16

用便利方法,给特殊的周,涂上灰色

全部完成后打开EXCEL,另存为PDF,一定要选“整个工作簿”再保存。

保存后直接打开PDF,页眉无法保存

PDF样式被固定了,便于批量打印

结余:

今天收到人事通知,我成为中2班的班主任,可以用这个涂灰色的方法,做班级的点名册。

标签:02,sheet,54,cell,ws,双休,new,copy,周日
From: https://blog.csdn.net/reasonsummer/article/details/141610345

相关文章

  • 2024年超好用的公司加密软件分享|8款公司防泄密软件推荐
    数据安全已成为企业运营中不可忽视的重要环节。随着数据泄露事件频发,企业急需高效、可靠的加密软件来保护敏感信息。以下是2024年备受推崇的8款公司加密软件,它们以其强大的功能和卓越的性能,为企业数据防泄密提供了坚实的保障。1.安企神它是一款集文档加密、数据防泄漏、......
  • 最新ps2024软件:Photoshop 2024 (Win&Mac)直装版
    Photoshop2024是AdobeSystems发布的最新版图像编辑软件,它继承了Photoshop系列一贯的强大功能和专业特性,并在此基础上进行了多项改进和优化。Photoshop2024作为Adobe的旗舰级图像编辑软件,不仅继承了前代产品的优秀特性,还在功能和性能上进行了显著提升。它凭借强大的图像处......
  • 第六届信息与计算机前沿技术国际学术会议(ICFTIC 2024)
    第六届信息与计算机前沿技术国际学术会议(ICFTIC2024)将在中国青岛举行,会期是2024年11月8-10日,为期三天,本次会议是由中国石油大学(华东)主办!大会安排主旨报告,特邀报告,以及数个专题讨论会(形式包括口头报告,海报展示,视频报告,以及在线报告等),将在会上共同探讨"信息与计算机前沿技......
  • 2024 CCF举办关于CSP-J/S的通知
    ​CCF面向社会非专业人士推出CSP非专业级别软件能力认证。非专业级别能力认证CSP-J/S分两个级别,分别为CSP-J(入门级,Junior)和CSP-S(提高级,Senior),均涉及算法和编程。任何人都可以报名参加。一、认证形式:CSP-J/S分第一轮和第二轮两个认证阶段。报名参加第一轮认证成绩优异者进入第二......
  • 全国30多个省、市、自治区2001-2022年统计年鉴大合集(全新整理)
    文章目录数据下载地址数据指标说明项目备注数据下载地址数据下载地址点击这里下载数据数据指标说明目前已有30个省份更新至2022年(安徽、北京、福建、云南、浙江、重庆、香港、台湾、天津、广东、广西、贵州、海南、湖北、湖南、吉林、江苏、辽宁、内蒙古、宁夏、......
  • [2024最新整理]300多个地级市GDP及第一、二、三产业占比数据(1990-2021年)
    文章目录数据下载地址数据指标说明项目备注数据下载地址数据下载地址点击这里下载数据数据指标说明梳理了2021年普通地级市GDP30强,其中有26个城市GDP总量超过了5000亿元,更有6个城市超过了万亿元,分别是苏州、无锡、佛山、泉州、南通、东莞;从省份来看,30强中江苏有......
  • P10785 [NOI2024] 集合
    思路:容易发现,区间\([l,r]\)中\(A\)与\(B\)等价的充分必要条为:两个序列中所有元素对于在区间\([l,r]\)内的出现集合组成的集合相等。这样才可以使得存在一种对应的映射方案使得等价。考虑哈希判定。设\(S_i\)表示\(i\)出现的位置的集合,则设\(\operatorname......
  • 【优技教育】Oracle 19c OCP 082题库(第1题)- 2024年修正版
    考试科目:1Z0-082考试题量:90通过分数:60%考试时间:150min本文为(CUUG原创)整理并解析,转发请注明出处,禁止抄袭及未经注明出处的转载。原文地址:http://www.cuug.com/index.php?s=/home/article/detail/id/3385.html第1题:1、Choosetwo.Youexecutethesecommands:CREATETAB......
  • Whole Tomato Visual Assist X 2024 Crack
    WholeTomatoVisualAssistX2024CrackKeyFeaturesofWholeTomatoVisualAssistX:FastNavigation:Swiftlymovebetweenfiles,methods,symbols,andreferenceswithinprojectsandsolutions.CodeInspection&Modernization:Identifyan......
  • 序列化;RPC 【2024年8月28日随笔】
    序列化什么是序列化序列化:把对象转化为可传输的字节序列过程称为序列化反序列化:把字节序列还原为对象的过程称为反序列化为什么序列化序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机......