今天学习什么?
今天我们来学习如何向Excel中写入数据,让Python帮你填写表格!
写入单元格数据
方法1:直接赋值
import openpyxlwb = openpyxl.load_workbook('学生成绩.xlsx')ws = wb.active# 写入单个单元格ws['A5'] = '小华'ws['B5'] = 88ws['C5'] = 90ws['D5'] = 85# 保存wb.save('学生成绩.xlsx')print("数据写入完成!")wb.close()
方法2:使用cell()方法
# 使用cell()方法ws.cell(row=6, column=1, value='小李')ws.cell(row=6, column=2, value=92)ws.cell(row=6, column=3, value=88)ws.cell(row=6, column=4, value=90)
写入一行数据
使用append()
# 添加一行数据ws.append(['小王', 85, 92, 88])ws.append(['小张', 90, 85, 92])
使用列表
# 写入一行row_data = ['小陈', 88, 95, 90]for col, value in enumerate(row_data, 1): ws.cell(row=7, column=col, value=value)
写入多行数据
方法1:循环写入
# 批量写入数据students = [ ['小刘', 82, 88, 85], ['小杨', 95, 90, 92], ['小周', 88, 85, 88]]for row, student in enumerate(students, 8):for col, value in enumerate(student, 1): ws.cell(row=row, column=col, value=value)
方法2:使用extend()
# 批量添加多行ws.append(['小林', 90, 88, 85])ws.append(['小郑', 85, 92, 90])ws.append(['小孙', 92, 88, 85])
实际案例
案例1:创建成绩单
import openpyxlwb = openpyxl.Workbook()ws = wb.activews.title = "成绩单"# 写入表头headers = ['姓名', '数学', '语文', '英语', '平均分', '等级']for col, header in enumerate(headers, 1): ws.cell(row=1, column=col, value=header)# 学生成绩数据students = [ ['小明', 85, 92, 88], ['小红', 92, 88, 95], ['小刚', 78, 85, 82], ['小丽', 95, 90, 92], ['小华', 88, 85, 88]]# 写入成绩并计算平均分和等级for row, (name, math, chinese, english) in enumerate(students, 2): avg = (math + chinese + english) / 3if avg >= 90: grade = '优秀'elif avg >= 80: grade = '良好'elif avg >= 70: grade = '中等'elif avg >= 60: grade = '及格'else: grade = '不及格' ws.cell(row=row, column=1, value=name) ws.cell(row=row, column=2, value=math) ws.cell(row=row, column=3, value=chinese) ws.cell(row=row, column=4, value=english) ws.cell(row=row, column=5, value=round(avg, 1)) ws.cell(row=row, column=6, value=grade)# 添加统计行ws.cell(row=len(students)+3, column=1, value='统计')ws.cell(row=len(students)+3, column=2, value='数学平均分')ws.cell(row=len(students)+3, column=5, value=round(sum(s[1] for s in students)/len(students), 1))ws.cell(row=len(students)+4, column=1, value='')ws.cell(row=len(students)+4, column=2, value='语文平均分')ws.cell(row=len(students)+4, column=5, value=round(sum(s[2] for s in students)/len(students), 1))ws.cell(row=len(students)+5, column=1, value='')ws.cell(row=len(students)+5, column=2, value='英语平均分')ws.cell(row=len(students)+5, column=5, value=round(sum(s[3] for s in students)/len(students), 1))# 保存文件wb.save('成绩单_完整版.xlsx')print("成绩单创建完成!")
案例2:从CSV导入数据到Excel
import openpyxlimport csv# 读取CSV文件csv_data = []with open('学生成绩.csv', 'r', encoding='utf-8') as f: reader = csv.reader(f)for row in reader: csv_data.append(row)# 创建Excel文件wb = openpyxl.Workbook()ws = wb.activews.title = "学生成绩"# 写入数据for row, data in enumerate(csv_data, 1):for col, value in enumerate(data, 1):# 尝试转换为数字try: value = int(value)except ValueError:try: value = float(value)except ValueError:pass ws.cell(row=row, column=col, value=value)# 保存文件wb.save('从CSV导入的成绩.xlsx')print("数据导入完成!")
案例3:批量更新成绩
import openpyxlwb = openpyxl.load_workbook('成绩单_完整版.xlsx')ws = wb.active# 模拟成绩更新updates = {'小明': {'math': 90, 'chinese': 95},'小刚': {'math': 85, 'chinese': 90}}# 查找并更新成绩for row in range(2, ws.max_row + 1): name = ws.cell(row=row, column=1).valueif name in updates:# 更新数学成绩if'math'in updates[name]: ws.cell(row=row, column=2, value=updates[name]['math'])# 更新语文成绩if'chinese'in updates[name]: ws.cell(row=row, column=3, value=updates[name]['chinese'])# 重新计算平均分 math = ws.cell(row=row, column=2).value chinese = ws.cell(row=row, column=3).value english = ws.cell(row=row, column=4).value avg = (math + chinese + english) / 3 ws.cell(row=row, column=5, value=round(avg, 1))# 重新计算等级if avg >= 90: grade = '优秀'elif avg >= 80: grade = '良好'elif avg >= 70: grade = '中等'elif avg >= 60: grade = '及格'else: grade = '不及格' ws.cell(row=row, column=6, value=grade) print(f"已更新 {name} 的成绩")# 保存文件wb.save('成绩单_更新版.xlsx')print("成绩更新完成!")
动手实践
今天的任务:
练习1:创建班级通讯录
import openpyxlwb = openpyxl.Workbook()ws = wb.activews.title = "班级通讯录"# 写入表头headers = ['姓名', '电话', '地址', '家长姓名', '备注']for col, header in enumerate(headers, 1): ws.cell(row=1, column=col, value=header)# 写入学生信息students = [ ['小明', '13800138000', '北京市', '张先生', '班长'], ['小红', '13900139000', '上海市', '李女士', '学习委员'], ['小刚', '13700137000', '广州市', '王先生', '体育委员'], ['小丽', '13600136000', '深圳市', '赵女士', '文艺委员']]for row, student in enumerate(students, 2):for col, value in enumerate(student, 1): ws.cell(row=row, column=col, value=value)# 调整列宽ws.column_dimensions['A'].width = 10ws.column_dimensions['B'].width = 15ws.column_dimensions['C'].width = 10ws.column_dimensions['D'].width = 10ws.column_dimensions['E'].width = 10wb.save('班级通讯录.xlsx')print("通讯录创建完成!")
本章小结
今天学到了什么?
明天预告:
明天我们将学习Excel数据分析!
练习题
学习心得
今天的学习心得:_______________
遇到的问题:_______________
明天要重点学习:_______________