一起用代码吸猫!本文正在参与【喵星人征文活动】
前言
近期云吸猫活动火热,猫咪太可爱了,趁着工作间隙,做一份2022年猫咪主题的日历给自己吧。
话不多说,我们来开始动手做吧!
下载猫咪图片
我们在网页上,关键字搜索"猫咪",可以搜索出上万张猫咪的图片
选择自己喜欢的图片,下载到文件中,且为每一张图片命名为从1~12的数字
下载依赖库
本次,我们需要下载第三方依赖库-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简单制作一个猫咪主题的日历,大家可以动手做一个个性化的日历吧~
以上是本期内容,欢迎大佬们点赞评论,下期见~
近期评论