第十五篇:Python操作Excel速成:读写单元格、样式与公式,你的第一个数据自动化脚本!告别手动录入!
excel 自动化
- Excel重复录入、手动修改,效率低还易错!
- 1.Openpyxl入门:Python与Excel的初次亲密接触
- 1.1安装与概念:工作簿、工作表、单元格
- 1.2读取Excel数据:让Python“看懂”你的表格
- 1.3写入Excel数据:让Python填写报表
- 2.掌控样式:Python自动设置Excel单元格字体、颜色与边框
- 2.1 文字与背景美化:字体、颜色、背景色一键设置
- 2.2 结构化美化:边框、行高列宽、单元格合并
- 3.自动化公式与函数:Python帮你写入Excel公式,实现自动计算!
- 阶段性结果:你的“智能Excel数据录入助手”!
- 展望:Excel自动化,开启你的数据管理新纪元!
Excel重复录入、手动修改,效率低还易错!
在职场中,Excel无疑是最常用的工具之一。但你是否也被它“折磨”过?
每天都要重复录入大量数据,枯燥乏味,还容易手抖输错。
月底汇总报表,需要手动修改上百个单元格的字体、颜色、边框,耗时耗力。
数据计算公式复杂,每次新建表格都要手动输入一遍,生怕输错一个标点符号。
这些重复且耗时的Excel操作,不仅严重拖慢了你的效率,也增加了出错的风险。
今天,我们将手把手教你如何利用Openpyxl库,实现Excel的:
读写单元格: 让Python像你一样输入数据。
自动设置样式: 字体、颜色、边框、行高列宽,一键美化报表。
写入公式: 让Excel自动计算,告别手动公式输入。
最终,你将打造出你的第一个数据自动化脚本,让Excel成为你真正的职场效率加速器!
1.Openpyxl入门:Python与Excel的初次亲密接触
要实现Python操作Excel,我们离不开强大的openpyxl库。它是专门为读写.xlsx格式文件设计的库,功能全面且易于使用。
功能: openpyxl将Excel文件视为一个“工作簿(Workbook)”,工作簿包含“工作表(Worksheet)”,工作表由一个个“单元格(Cell)”组成。Python通过操作这些对象,就能控制Excel。
安装openpyxl:
pip install openpyxl
1.1安装与概念:工作簿、工作表、单元格
工作簿 (Workbook): 整个Excel文件,是最高层级的对象。
工作表 (Worksheet): 工作簿中的每个Sheet,如Sheet1、Sheet2。
单元格 (Cell): 工作表中的最小单位,通过行号和列号(如A1, B2)定位。
1.2读取Excel数据:让Python“看懂”你的表格
场景: 你需要从一个Excel文件中提取数据进行分析,或者需要读取旧表格中的信息。手动复制粘贴不仅慢,还可能破坏格式。
方案: openpyxl能像你一样“阅读”Excel表格,精确读取任何单元格的数据,实现Python读取Excel的自动化。
代码:
from openpyxl import load_workbook
import osdef read_excel_data(file_path):"""读取Excel文件中的数据。这是Python读取Excel的基础,实现数据自动化处理。:param file_path: Excel文件路径"""if not os.path.exists(file_path): return print(f"❌ Excel文件不存在:{file_path}")try:workbook = load_workbook(file_path) # 加载工作簿sheet = workbook.active # 获取当前活动工作表 (通常是第一个)print(f"🚀 正在读取Excel文件:'{os.path.basename(file_path)}'")print(f" 活动工作表名称:'{sheet.title}'")# 遍历所有行和列,读取单元格数据for row_index in range(1, sheet.max_row + 1): # 从第1行到最大行row_data = []for col_index in range(1, sheet.max_column + 1): # 从第1列到最大列cell_value = sheet.cell(row=row_index, column=col_index).valuerow_data.append(cell_value)print(f" 第{row_index}行数据:{row_data}")workbook.close() # 关闭工作簿,释放资源print("✨ Excel数据读取完成!")except Exception as e:print(f"❌ 读取Excel失败:{e}")if __name__ == "__main__":# 准备一个测试Excel文件,例如在桌面创建一个 'sample_data.xlsx'# 并在其中填写一些数据,如:# A1: 姓名 B1: 年龄# A2: 张三 B2: 25# A3: 李四 B3: 30test_excel_path = os.path.expanduser("~/Desktop/sample_data.xlsx")os.makedirs(os.path.dirname(test_excel_path), exist_ok=True) # 确保目录存在# 如果文件不存在,可以先创建一个简单的Excel文件用于测试# from openpyxl import Workbook# wb = Workbook(); ws = wb.active; ws['A1'] = '姓名'; ws['B1'] = '年龄'# ws['A2'] = '张三'; ws['B2'] = 25; ws['A3'] = '李四'; ws['B3'] = 30# wb.save(test_excel_path)read_excel_data(test_excel_path)
操作
准备Excel文件: 在桌面创建一个名为sample_data.xlsx的Excel文件,并在其中输入一些测试数据。
修改代码路径: 复制上方代码到VS Code,保存为read_excel.py。修改 test_excel_path。
运行: 在VS Code终端运行 python read_excel.py。
效果:
1.3写入Excel数据:让Python填写报表
场景: 你需要批量生成报告、填写数据表格,但手动逐个输入效率低下,容易疲劳出错。
方案: openpyxl能让你在Python中直接创建新的Excel文件,或者向现有文件写入数据,包括单个单元格、整行、整列甚至大批量数据,实现Python写入Excel的自动化。
代码:
from openpyxl import Workbook
import osdef write_excel_data(file_path):"""向Excel文件写入数据,并创建新文件。这是Python写入Excel的基础,实现数据自动化脚本。:param file_path: 输出Excel文件路径"""os.makedirs(os.path.dirname(file_path), exist_ok=True) # 确保输出目录存在try:workbook = Workbook() # 创建一个新的工作簿sheet = workbook.active # 获取活动工作表# 写入单个单元格数据sheet['A1'] = '产品名称'sheet['B1'] = '销量'sheet['C1'] = '单价'sheet['D1'] = '总价'# 写入多行数据 (示例数据)sales_data = [['键盘', 100, 120.00],['鼠标', 150, 80.50],['显示器', 50, 1200.00]]for row_data in sales_data:sheet.append(row_data) # append() 方法会从下一行开始添加数据workbook.save(file_path) # 保存工作簿到文件print(f"✅ Excel数据已成功写入并保存到:'{file_path}'")workbook.close()except Exception as e:print(f"❌ 写入Excel失败:{e}")if __name__ == "__main__":output_excel_path = os.path.expanduser("~/Desktop/daily_sales_report.xlsx")write_excel_data(output_excel_path)
步骤:
修改代码路径: 复制上方代码到VS Code,保存为write_excel.py。修改 output_excel_path。
运行: 在VS Code终端运行 python write_excel.py。
效果:
2.掌控样式:Python自动设置Excel单元格字体、颜色与边框
仅仅写入数据还不够,专业的报表还需要美观的格式。
手动设置字体、颜色、边框、调整行高列宽,同时Python操作Excel通过openpyxl,自动设置Excel样式!
作用: openpyxl提供了丰富的Style、Font、PatternFill、Border等对象,让你用代码精确控制单元格的视觉表现。
2.1 文字与背景美化:字体、颜色、背景色一键设置
场景: 你需要为Excel报表的标题加粗、设为蓝色,为关键数据行添加醒目的背景色,突出重点。
方案: Python能够批量设置单元格的字体(粗体、斜体、大小、颜色)、背景填充色,让你的报表瞬间“活”起来!
代码:
from openpyxl import Workbook
from openpyxl.styles import Font, PatternFill, Border, Side
import osdef set_excel_styles(file_path):"""自动设置Excel单元格的字体、颜色和背景色。这是Python操作Excel实现报表自动化的重要一步。:param file_path: 输出Excel文件路径"""os.makedirs(os.path.dirname(file_path), exist_ok=True)try:workbook = Workbook()sheet = workbook.activesheet.title = "销售数据报表"# 写入标题sheet['A1'] = '产品名称'sheet['B1'] = '销量'sheet['C1'] = '单价'sheet['D1'] = '总价'sheet['E1'] = '状态'# 设置标题行样式:加粗、蓝色字体、黄色背景header_font = Font(bold=True, color="000000FF") # 蓝色字体header_fill = PatternFill(start_color="FFFFFF00", end_color="FFFFFF00", fill_type="solid") # 黄色填充for col_letter in ['A', 'B', 'C', 'D', 'E']:cell = sheet[f'{col_letter}1']cell.font = header_fontcell.fill = header_fill# 写入示例数据sales_data = [['键盘', 100, 120.00, None, '已完成'],['鼠标', 150, 80.50, None, '进行中'],['显示器', 50, 1200.00, None, '已完成'],['耳机', 200, 350.00, None, '待处理']]for row_data in sales_data:sheet.append(row_data)# 设置奇数行背景色for row_index in range(2, sheet.max_row + 1):if row_index % 2 == 1: # 奇数行for col_index in range(1, sheet.max_column + 1):sheet.cell(row=row_index, column=col_index).fill = PatternFill(start_color="FFE0E0E0", end_color="FFE0E0E0", fill_type="solid") # 浅灰色workbook.save(file_path)print(f"✅ Excel样式已成功设置并保存到:'{file_path}'")workbook.close()except Exception as e:print(f"❌ 设置Excel样式失败:{e}")if __name__ == "__main__":output_excel_path = os.path.expanduser("~/Desktop/styled_report.xlsx")set_excel_styles(output_excel_path)
步骤:
修改代码路径: 复制上方代码到VS Code,保存为excel_styles.py。修改 output_excel_path。
运行: 在VS Code终端运行 python excel_styles.py。
效果展示:
2.2 结构化美化:边框、行高列宽、单元格合并
场景: 你需要为报表添加清晰的边框,调整行高列宽以适应内容,甚至合并单元格作为标题。
方案: openpyxl能精细控制单元格的边框样式,以及行高列宽的调整和单元格的合并/取消合并,让你的报表结构更清晰。
代码:
from openpyxl import Workbook
from openpyxl.styles import Border, Side
from openpyxl.utils import get_column_letter
import osdef set_excel_structure_styles(file_path):"""自动设置Excel单元格边框、行高列宽和合并单元格。这是Python操作Excel实现高级报表自动化的关键。:param file_path: 输出Excel文件路径"""os.makedirs(os.path.dirname(file_path), exist_ok=True)try:workbook = Workbook()sheet = workbook.activesheet.title = "季度销售总览"# 设置合并单元格作为大标题sheet.merge_cells('A1:D1')sheet['A1'] = "2023年第四季度销售总览"sheet['A1'].font = Font(size=18, bold=True)sheet['A1'].alignment = Alignment(horizontal='center', vertical='center') # 居中对齐# 写入表头headers = ['区域', '产品', '销售额', '完成率']sheet.append(headers) # 追加到A2行# 写入示例数据data = [['华东', '键盘', 15000, '85%'],['华东', '鼠标', 12000, '90%'],['华南', '显示器', 25000, '95%'],['华北', '耳机', 18000, '80%']]for row_data in data:sheet.append(row_data)# 设置所有有数据的单元格边框thin_border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin'))for row in sheet.iter_rows(min_row=2): # 从第2行开始(表头行)for cell in row:cell.border = thin_border# 自动调整列宽for col in sheet.columns:max_length = 0column = col[0].column # 获取列的索引号 (1-based)for cell in col:try:if len(str(cell.value)) > max_length:max_length = len(str(cell.value))except:passadjusted_width = (max_length + 2) * 1.2 # 经验公式,可调整sheet.column_dimensions[get_column_letter(column)].width = adjusted_width# 设置特定行高 (例如第一行标题行)sheet.row_dimensions[1].height = 40workbook.save(file_path)print(f"✅ Excel结构样式已成功设置并保存到:'{file_path}'")workbook.close()except Exception as e:print(f"❌ 设置Excel结构样式失败:{e}")if __name__ == "__main__":output_excel_path = os.path.expanduser("~/Desktop/structured_report.xlsx")set_excel_structure_styles(output_excel_path)
步骤:
修改代码路径: 复制上方代码到VS Code,保存为excel_structure.py。修改 output_excel_path。
运行: 在VS Code终端运行 python excel_structure.py。
效果:
3.自动化公式与函数:Python帮你写入Excel公式,实现自动计算!
场景: 每次新建Excel报表,你都要手动输入SUM、AVERAGE、VLOOKUP等公式,然后拖拽填充,不仅效率低,还容易输错。
方案: openpyxl能让你直接在Python中写入Excel公式,Excel会自动进行计算,实现Excel自动计算,让你的报表“活”起来!
作用: 单元格的value属性可以直接赋值为Excel公式字符串。
代码:
from openpyxl import Workbook
import osdef write_excel_formulas(file_path):"""向Excel文件写入公式,实现Excel自动计算。这是Python写入Excel公式的核心功能。:param file_path: 输出Excel文件路径"""os.makedirs(os.path.dirname(file_path), exist_ok=True)try:workbook = Workbook()sheet = workbook.activesheet.title = "销售业绩分析"# 写入表头sheet['A1'] = '产品'sheet['B1'] = 'Q1销量'sheet['C1'] = 'Q2销量'sheet['D1'] = 'Q3销量'sheet['E1'] = 'Q4销量'sheet['F1'] = '年度总销量' # 目标:通过公式计算# 写入示例数据sales_data = [['键盘', 100, 120, 90, 130],['鼠标', 150, 130, 110, 160],['显示器', 50, 60, 70, 80]]for row_data in sales_data:sheet.append(row_data)# **核心操作:写入Excel公式**# 在F列(第六列)写入SUM公式,计算B到E列的和for row_index in range(2, sheet.max_row + 1): # 从数据开始的行 (第二行)# 例如:在F2单元格写入 =SUM(B2:E2)sheet[f'F{row_index}'] = f'=SUM(B{row_index}:E{row_index})'# 写入总计行sheet.append([]) # 添加一个空行作为分隔sheet['A' + str(sheet.max_row)] = '总计'sheet['F' + str(sheet.max_row)] = f'=SUM(F2:F{sheet.max_row - 1})' # 总销量公式workbook.save(file_path)print(f"✅ Excel公式已成功写入并保存到:'{file_path}'")workbook.close()except Exception as e:print(f"❌ 写入Excel公式失败:{e}")if __name__ == "__main__":output_excel_path = os.path.expanduser("~/Desktop/report_with_formulas.xlsx")write_excel_formulas(output_excel_path)
步骤:
修改代码路径: 复制上方代码到VS Code,保存为excel_formulas.py。修改 output_excel_path。
运行: 在VS Code终端运行 python excel_formulas.py。
打开文件验证: 用Excel软件打开生成的文件,你会发现“年度总销量”和“总计”已经自动计算出来了!
效果:
阶段性结果:你的“智能Excel数据录入助手”!
我们回顾了openpyxl库的基础,学习了如何:
Python读取Excel: 让Python像人一样“看懂”表格数据。
Python写入Excel: 精准填充单元格、行、列,甚至创建全新报表,实现数据自动化处理。
自动设置样式: 告别手动调整字体、颜色、边框、行高列宽,让报表瞬间专业。
Python写入Excel公式: 让Excel自动计算,解决繁琐的公式输入和拖拽。
现在,你不再需要为Excel的重复录入、手动修改而烦恼。你的数据自动化脚本将帮你:
提高效率: 几秒钟完成几个小时的工作量。
减少错误: 机器操作更精准,避免人为失误。
提升专业度: 自动生成格式统一、美观的报表。
这个“智能Excel数据录入助手”只是Python办公自动化的一小步,但却是你职场效率提升的一大步!
展望:Excel自动化,开启你的数据管理新纪元!
通过本篇文章,你已经初步掌握了Python操作Excel的强大能力,为你的办公自动化之旅又增添了一个重量级技能!你学会了如何利用openpyxl这个Python实用工具,高效地进行Excel的读写、样式设置和公式写入。
除了今天学到的功能,你还希望Python能帮你实现哪些Excel自动化操作?比如批量合并多个Excel文件?自动筛选数据并生成图表?在评论区分享你的需求和想法,你的建议可能会成为我们下一篇文章的灵感来源!
敬请期待! 在下一篇文章中,我们将继续深入Excel的自动化世界,探索如何利用Python实现Excel数据合并与拆分,以及更复杂的数据清洗,让你的数据处理工作效率翻倍!同时,本系列所有代码都将持续更新并汇总在我的GitHub仓库中,敬请关注!未来,这个**“Python职场效率专家实战包”还将包含更多开箱即用、功能强大**的自动化工具,助你一路开挂!