openpyxl基础的几个使用方法

openpyxl入门的几个使用方法,简单读写

### 需要注意的是openpyxl的sheet中的index是从1开始,不是从0开始。有点奇葩,切记切记
# 读取文件
wb = openpyxl.open(file_path)
# 读取表格(使用名称)
sheet = wb.get_sheet_by_name('sheet1')
# 列数量
sheet.max_column
# 行数量
sheet.max_row
# 读取单元格内容
sheet.cell(i, j).value
# 给单元格赋值
sheet.cell(i, j, value=XXX)
# 保存文件
wb.save(file_path)
# 关闭
wb.close()
<think>好的,用户想用Pythonopenpyxl和calendar模块创建Excel日历表格。首先,我需要确定用户的需求是什么。他们可能希望生成一个包含日历的Excel文件,可能每个月一个工作表,或者以某种格式展示日期。接下来,我需要回忆这两个模块的基本用法。 首先,calendar模块可以生成日历数据,比如每个月的日期排列。然后,openpyxl用来操作Excel文件,创建、编辑和保存工作簿。需要结合这两个模块,将calendar生成的数据写入Excel的各个单元格中。 接下来,我得考虑具体步骤。可能包括:导入模块、创建Excel工作簿、循环生成每个月份的工作表、使用calendar.monthcalendar获取该月的日期矩阵,然后遍历这个矩阵,将日期写入对应的单元格。同时,可能需要设置单元格的格式,比如字体、对齐方式,以及添加星期几的标题。 用户提到的引用中有一些示例代码,比如创建sheet时使用index和title,设置单元格的字体。需要确保代码中的语法正确,比如使用Font时需要从openpyxl.styles导入。另外,引用中提到保存为Excel文件后如何提取为图片,这可能不是当前问题的主要部分,但生成Excel是重点。 需要注意的问题包括:月份的正确处理,calendar.monthcalendar返回的周列表,其中首尾可能会有0值(非本月日期),可能需要过滤掉这些0。另外,设置单元格的宽度和高度,让日历看起来整齐。可能还需要添加表头,比如“星期一”到“星期日”。 可能的错误点:忘记导入必要的模块,比如Font或Alignment;处理日期时的索引错误;文件保存路径的问题。需要指导用户正确安装openpyxl,并确保代码中的路径可写。 最后,生成相关问题,帮助用户深入理解,比如如何美化格式、添加节假日或导出为图片,这些在引用中也有提及。需要确保回答结构清晰,步骤明确,代码示例正确,并引用相关的参考资料。</think>### 分步指南:使用Python openpyxl和calendar模块创建Excel日历表格 #### 1. 环境准备 安装所需库: ```bash pip install openpyxl ``` #### 2. 基础代码框架 ```python import calendar from openpyxl import Workbook from openpyxl.styles import Font, Alignment from openpyxl.utils import get_column_letter # 创建Excel工作簿 wb = Workbook() wb.remove(wb.active) # 删除默认创建的空白Sheet # 设置年份 year = 2023 for month in range(1, 13): # 创建每月工作表 sheet = wb.create_sheet(title=f"{month}月") # [^3] # 设置列宽(A到G列) for col in range(1, 8): sheet.column_dimensions[get_column_letter(col)].width = 4 # 写入星期标题 weekdays = ["一", "二", "三", "四", "五", "六", "日"] for idx, day in enumerate(weekdays, start=1): cell = sheet.cell(row=2, column=idx, value=f"星期{day}") cell.font = Font(name="微软雅黑", size=12, bold=True) # [^4] # 获取当月日历数据 month_cal = calendar.monthcalendar(year, month) # 写入日期数据 for week_idx, week in enumerate(month_cal, start=3): for day_idx, day in enumerate(week, start=1): if day != 0: cell = sheet.cell(row=week_idx, column=day_idx, value=day) cell.font = Font(name="微软雅黑", size=11) # cell.alignment = Alignment(horizontal="center") # 保存文件 wb.save(f"{year}_calendar.xlsx") ``` #### 3. 代码解析 1. **创建工作簿**:使用`Workbook()`初始化,移除默认Sheet 2. **设置样式**: - 列宽调整为字符宽度4 - 使用微软雅黑字体保证中文兼容性 - 日期居中显示 3. **日历数据获取**: - `calendar.monthcalendar()`返回嵌套列表,包含日期矩阵 - 每行表示一周,0表示非当月日期 4. **数据写入逻辑**: - 第2行写入星期标题 - 从第3行开始写入日期 - 跳过0值(非本月日期) #### 4. 扩展优化建议 1. **添加月份标题**: ```python sheet.merge_cells('A1:G1') title_cell = sheet.cell(row=1, column=1, value=f"{year}年{month}月") title_cell.font = Font(size=14, bold=True) title_cell.alignment = Alignment(horizontal="center") ``` 2. **设置行高**: ```python sheet.row_dimensions[1].height = 25 # 标题行高度 ``` #### 5. 输出结果 生成包含12个月工作表的Excel文件,每个工作表格式: ``` | 2023年X月 | | 周一 | 周二 | ... | 周日 | | 1 | 2 | ... | 5 | | 6 | 7 | ... | 12 | ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值