【办公类-16-06】“校历(月日版)”(python 排班表系列)

效果展示:校历日期显示带月份

背景需求: 

     每学期初我们都会使用到网上的校历,便于进行周计划制作、各类安全记录本填写等。

 存在问题:

1.全局看日历上,每行每列都是单独的数字(“日”), 在使用时无法马上判定这个数字是几月份的。需要向上查找月份。

2.单独看周次,一行的数字无法判定属于几月份。需要查找1日,才能知道它是几号。

因此,我希望有校历上日期的显示方式不是”D“(7),而是“MM/DD"(11/07)

代码设计:

通过代码拼拼接。我实现了想要的结果。


# https://www.cnblogs.com/gradyblog/p/16457279.html
import datetime
import sys
import random
import xlrd
import xlwt
from openpyxl import load_workbook

start=input('本学期开始的日期,输入样例(2022-09-01)\n')
end=input('本学期结束的日期,输入样例(2023-01-17)\n')
begin=int(input('开始日期前空几(周1周2周3 一共3天)\n'))
last=int(input('结束日期后留几天空白(建议7天)\n'))
weeksday=int(input('本学期共有几周(如21周)\n'))


print('------------第1步:生成年月日列表(前后有空日)------------')

def date_generate(start_date, end_date):
    # print(f'Hi, {start_date}, {end_date}')
    start_dt = datetime.datetime.strptime(start_date, "%Y-%m-%d")
    end_dt = datetime.datetime.strptime(end_date, "%Y-%m-%d")
    next_dt = start_dt

    date_list = []
    for x in range(begin):        # 日期开始前加几个空值,替代8月29日8月30日8月31日
        b=''
        date_list.append(b)
    print(date_list)  

    while next_dt <= end_dt:
        # next_dt_str = next_dt.strftime("%Y-%m-%d")
        next_dt_str = next_dt.strftime("%m/%d")
        # print(next_dt_str)
        date_list.append(next_dt_str)
        next_dt = next_dt + datetime.timedelta(days=1)

    print(date_list)
    
    for x in range(last):        # 日期结束后加几个空值,以免重新开始选取
        b=''
        date_list.append(b)
    print(date_list)       #生成全部需要的列表 ['', '', '', '2022-09-01', '2022-09-02', '2022-09-03', '2022-09-04', '2022-09-05', '2022-09-06', '2022-09-07', '2022-09-08', '2022-09-09', '2022-09-10', '2022-09-11', '2022-09-12', '2022-09-13', '2022-09-14', '2022-09-15', '2022-09-16', '2022-09-17', '2022-09-18', '2022-09-19', '2022-09-20', '2022-09-21', '2022-09-22', '2022-09-23', '2022-09-24', '2022-09-25', '2022-09-26', '2022-09-27', '2022-09-28', '2022-09-29', '2022-09-30', '2022-10-01', '2022-10-02', '2022-10-03', '2022-10-04', '2022-10-05', '2022-10-06', '2022-10-07', '2022-10-08', '2022-10-09', '2022-10-10', '2022-10-11', '2022-10-12', '2022-10-13', '2022-10-14', '2022-10-15', '2022-10-16', '2022-10-17', '2022-10-18', '2022-10-19', '2022-10-20', '2022-10-21', '2022-10-22', '2022-10-23', '2022-10-24', '2022-10-25', '2022-10-26', '2022-10-27', '2022-10-28', '2022-10-29', '2022-10-30', '2022-10-31', '2022-11-01', '2022-11-02', '2022-11-03', '2022-11-04', '2022-11-05', '2022-11-06', '2022-11-07', '2022-11-08', '2022-11-09', '2022-11-10', '2022-11-11', '2022-11-12', '2022-11-13', '2022-11-14', '2022-11-15', '2022-11-16', '2022-11-17', '2022-11-18', '2022-11-19', '2022-11-20', '2022-11-21', '2022-11-22', '2022-11-23', '2022-11-24', '2022-11-25', '2022-11-26', '2022-11-27', '2022-11-28', '2022-11-29', '2022-11-30', '2022-12-01', '2022-12-02', '2022-12-03', '2022-12-04', '2022-12-05', '2022-12-06', '2022-12-07', '2022-12-08', '2022-12-09', '2022-12-10', '2022-12-11', '2022-12-12', '2022-12-13', '2022-12-14', '2022-12-15', '2022-12-16', '2022-12-17', '2022-12-18', '2022-12-19', '2022-12-20', '2022-12-21', '2022-12-22', '2022-12-23', '2022-12-24', '2022-12-25', '2022-12-26', '2022-12-27', '2022-12-28', '2022-12-29', '2022-12-30', '2022-12-31', '2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05', '2023-01-06', '2023-01-07', '2023-01-08', '2023-01-09', '2023-01-10', '2023-01-11', '2023-01-12', '2023-01-13', '2023-01-14', '2023-01-15', '2023-01-16', '2023-01-17', '', '', '', '', '', '', '']

 
    print('-----------第2步,每周都抽取7个日期--------')
    list2=[]# 取空列表
    # 第1周
    for i in range(0,1):#共21周这是第1周
            list1=date_list
            print(date_list[0:7]) # 第一周只有4天,周四周五周六周日,但是因为之前添加了3个空格,所以也是取0-7
            list2.append(date_list[0:7]) 
    # 第2-21周
    for i in range(1,weeksday):  #共21周    这是第2-21周  ,如果是21周,把2,21 改成2,22 
            list1=date_list[0] # 
            date_list=date_list[7:]  #  前面第一周已经提取了7个,第二周从第8个元素开始提取
            date_list.append(list1) # 
            print(date_list[0:7]) # 列表里每次提取7个
            list2.append(date_list[0:7])  
    
    print('-----------第3步,保存到excle--------')
    # 以下是xls保存
    arrlan = len(list2)# list2是终端显示的列表值2
    workbook = xlwt.Workbook()# 新建xls工作簿
    sheet = workbook.add_sheet("Sheet")# 新建xls工作簿的工作表的名字是sheet
    
    # 第0列 写入“第1周、第2周、第3周……第21周    
    dates=[]
    for i in range(1,weeksday+1):
        n="第{}周".format(i)    # 用遍历方法获得“第1周、第2周、第21周”字样,
        dates.append(n)          # 添加到列表    
    print(dates)        
    # print(date)

    row=1
    for d in range(0, len(dates)):
        sheet.write(row, 0, dates[d])         # 这里enumerate不能用,因为只有一列,所以就用
        row += 1    
    
    # 第0行 写入 星期一  '星期二','星期三','星期四','星期五 ,'星期六','星期日'#
    weeks = ['周次','星期一','星期二','星期三','星期四','星期五','星期六','星期日',]
    week = len(weeks) 

    col=0
    for d in range(0, len(weeks)):
        sheet.write(0,col,weeks[d])         # 因为只有一行,所以就用有两种写法(enumerate和这种)
        col+= 1  
    
    # B2 写入 date_list所有7个7个提取的日期
    row = 1
    for i in range(arrlan):
        for col,item in enumerate(list2[i],1):
                sheet.write(row,col,item)  
        row += 2   行等于
                
    try:
        workbook.save(r"D:\test\2022第一学期校历.xls")    # 新建保存 只能xls
        print('计划生成成功')
    except e:
        print('失败...')
        print(e)

# Press the green button in the gutter to run the script.
# 定义起始日期和结束日期
if __name__ == '__main__':
    start_date = "{}".format(str(start))
    end_date = "{}".format(str(end))
    date_generate(start_date, end_date)

运行后需要填写输入的值(以2022学年第1学期为例*上学期9月1日周四开学)

显示样式1——“MM/DD”

 

 显示样式2——“YY-MM-DD”

 

 

  显示样式3——“MM-DD”

 

 用同样的方法,可以制作2022学年下学期的日历表(带月份)

基本信息设置

把周次里的”星期日“放到最前面,这样能和上表的排序一样

 20222年第二学期的校历效果

20221010优化——周与周之间空一行,看起来不那么拥挤(代码已经调整)

 

 感悟:

这下再也不用手动填写”志愿者安排表”、”早值班安排表”里的日期了。✌

优化版

【办公类-16-07】“校历(月日(去0)+含星期)”(python 排班表系列)2022年上学期校历+2022下学期校历_校历html-CSDN博客文章浏览阅读477次。【办公类-16-07】“校历(月日(去0)+包含“星期”)”(python 排班表系列)_校历htmlhttps://blog.csdn.net/reasonsummer/article/details/127284287

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,以下是一个简单的uni-app的代码示例,你可以根据自己的需求进行修改和优化: 1. 创建uni-app项目,选择vue-cli模板和uni-app框架。 2. 在pages文件夹下创建calender.vue文件,编写页面的HTML结构和样式,例如: ``` <template> <div class="calender"> <div class="calender-header"> <img src="../static/logo.png" alt="logo"> <h1>2019年</h1> </div> <div class="calender-month"> <h2>1月</h2> <ul> <li>1:元旦节</li> <li>19:2019年寒假开始</li> </ul> </div> <div class="calender-month"> <h2>2月</h2> <ul> <li>5:2019年春节</li> <li>10:2019年寒假结束</li> </ul> </div> <!-- 其他月份的内容 --> </div> </template> <style scoped> .calender { width: 100%; max-width: 600px; margin: 0 auto; font-size: 16px; color: #333; } .calender-header { display: flex; align-items: center; justify-content: center; padding: 20px; background-color: #f5f5f5; } .calender-header img { width: 40px; margin-right: 10px; } .calender-header h1 { font-size: 24px; font-weight: bold; } .calender-month { padding: 20px; border-bottom: 1px solid #e5e5e5; } .calender-month h2 { font-size: 18px; font-weight: bold; margin-bottom: 10px; } .calender-month ul { list-style: none; margin: 0; padding: 0; } .calender-month li { margin-bottom: 10px; } </style> ``` 3. 在script标签中,可以使用Vue组件的方式获取内容,例如: ``` <script> export default { data() { return { calender: [ { month: '1月', events: [ '1:元旦节', '19:2019年寒假开始' ] }, { month: '2月', events: [ '5:2019年春节', '10:2019年寒假结束' ] }, // 其他月份的内容 ] } } } </script> ``` 4. 可以在页面中使用v-for指令遍内容,例如: ``` <template> <div class="calender"> <div class="calender-header"> <img src="../static/logo.png" alt="logo"> <h1>2019年</h1> </div> <div v-for="(item, index) in calender" :key="index" class="calender-month"> <h2>{{ item.month }}</h2> <ul> <li v-for="(event, key) in item.events" :key="key">{{ event }}</li> </ul> </div> </div> </template> ``` 5. 可以为页面添加一些功能,例如搜索和分享,可以使用uni-app提供的API进行开发和调用。 以上是一个简单的uni-app的代码示例,你可以根据自己的需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值