女友生日,她最喜欢猫。这款猫咪日历最适合做她的生日礼物。

前言

     我看网上女友过生日都是送她的手织包包,各种手工艺品,我的女朋友她最喜欢的是猫,家里也养了一只,所以你们是手工艺品,那我就来一款猫咪2022的日历送她吧,每天打开电脑都能看到最喜欢的猫咪和知道今天是几号,这个不比手工艺品差吧?

image.png

下载猫咪图片

我们在网页上,关键字搜索"猫咪",可以搜索出上万张猫咪的图片

image.png

选择自己喜欢的图片,下载到文件中,且为每一张图片命名为从1~12的数字

image.png

下载依赖库

本次,我们需要下载第三方依赖库-openpyxl完成写入编辑excel表格操作

  • openpyxl 模块介绍

    openpyxl 是用于对Excel文件进行读取写入操作的库

  • openpyxl 模块下载

    pip install openpyxl
    复制代码

导入依赖库

根据日历的需求:要生成日历,并且写入到Excel表格,所以我们需要导入一下库

import openpyxl
# 日历模块
import calendar

# 设置单元格样式
from openpyxl.styles import Alignment,PatternFill,Font
# 获取列的字母
from openpyxl.utils import  get_column_letter
# 向Excel写入图片
from openpyxl.drawing.image import  Image
# 加载Excel文件
from openpyxl import load_workbook
复制代码

生成12个月的日历

根据日历的需求分析,做法如下

  • 首先使用openpyxl.Workbook()创建新

    wb = openpyxl.Workbook()
    复制代码
  • 使用 openpyxl.Workbook实例化对象wb调用create_sheet创建表

    sheet = wb.create_sheet(index=0,title=sheet_name[i])
    复制代码
  • 使用calendar.monthcalendar(year,i)获取指定月的二维列表数据

    print(calendar.monthcalendar(2022,1))
    
    # [[0, 0, 0, 0, 0, 1, 2], 
    [3, 4, 5, 6, 7, 8, 9], 
    [10, 11, 12, 13, 14, 15, 16], 
    [17, 18, 19, 20, 21, 22, 23], 
    [24, 25, 26, 27, 28, 29, 30], 
    [31, 0, 0, 0, 0, 0, 0]]
    复制代码
  • 使用两个for循环就可以得到12个月的二维列表

    for j in range(len(calendar.monthcalendar(year,i))):
    
        for k in range(len(calendar.monthcalendar(year,i)[j])):
    
            value = calendar.monthcalendar(year,i)[j][k]
    复制代码
  • 条件判断当得到的数据是0是,则表格中写入空;否则写入具体的日期

    f value == 0:
    
        value = ''
        sheet.cell(row=j+9,column=k+1).value=value
    
    else:
        sheet.cell(row=j+9,column=k+1).value=value
    
        sheet.cell(row=j+9,column=k+1).font=Font(u"微软雅黑",size=11)
    复制代码
  • 为日历添加标题和样式设置

    • 由于设置日历firstday设置成周天为一周的第一天
    • 传入的日历标题为 ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]
    • 字体设置成微软雅黑,大小为11
    • 单元格居中:Alignment(horizontal="right",vertical="center")
    for R1 in range(1,100):
    
        for C2 in range(1,100):
    
            sheet.cell(row=R1,column=C2).fill = fill
    
        days = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]
    
        num = 0
    
        # 设置日历单元格样式
        for k3 in range(1,8):
    
            sheet.cell(row=8,column=k3).value = days[num]
            sheet.cell(row=8, column=k3).alignment= align
            sheet.cell(row=8, column=k3).font = Font(u"微软雅黑",size=11)
    
            sheet.column_dimensions[get_column_letter(k3)].width = 12
    
            num +=1
        ```
    
    
    复制代码
  • 最后我们设置一下日历的表格格式

    • 单元格高度设置为30
    • 单元格字体样式为微软雅黑
    • 单元格水平居中
    for k4 in range(8,15):
    
        sheet.row_dimensions[k4].height = 30
    
        sheet.cell(row=3,column=1).value = year+"年"
    
        sheet.cell(row=4,column=1).value = sheet_name[i]
    
        sheet.cell(row=3, column=1).font = Font(u"微软雅黑", size=16,bold=True,color="FF7887")
    
        sheet.cell(row=4, column=1).font = Font(u"微软雅黑", size=16, bold=True, color="FF7887")
    
        sheet.cell(row=3, column=1).alignment = align
        sheet.cell(row=4, column=1).alignment = align
    复制代码
  • 保存生成好的日历文件

    wb.save(filename)
    复制代码

添加喵咪图片

  • wb.load_workbook()打开日历文件

  • wb.get_sheet_names()获取Excel表格名字列表

  • 加载出来的文件对象使用add_image()方法把图片添加到对应表中   需要完整项目代码点这里即可获取

    def add_image(filepath):
    
            wb = load_workbook(filepath)
    
            sheet_names = wb.get_sheet_names()
    
            for i in range(0,len(sheet_names)):
    
                wb = load_workbook(filepath)
    
                ws = wb[sheet_names[i]]
    
                ws.merge_cells('I1:P20')
    
                img = Image(f'file/{i}.jpg')
    
                ws.add_image(img,'I1')
    
                wb.save(filepath)
    复制代码

最后来看一下效果吧

 

总结

本期,使用Python简单制作一个猫咪主题的日历,大家可以动手做一个个性化的日历吧~


是不是很简单。

Guess you like

Origin blog.csdn.net/weixin_43881394/article/details/121329799