乐于分享
好东西不私藏

第六期:Excel自动化处理——让数据工作事半功倍

第六期:Excel自动化处理——让数据工作事半功倍

一、openpyxl库介绍

openpyxlPython中最流行的Excel处理库之一,它支持读写Excel 2010及以后版本的xlsx/xlsm文件。openpyxl的功能非常全面,可以处理单元格数据、公式、样式、图表、数据验证、条件格式等各种Excel元素。与xlrd/xlwt等老牌库相比,openpyxlxlsx格式有更好的支持,而且仍在积极维护中。

安装openpyxl非常简单,只需执行pip install openpyxl命令即可。使用openpyxl的基本流程是:首先加载或创建工作簿(Workbook),然后获取工作表(Worksheet),接着操作单元格(Cell),最后保存工作簿。openpyxl提供了直观的API,如wb.active获取活动工作表,ws[‘A1’]访问单元格,ws.append()追加数据行等,使用起来非常方便。

二、批量数据处理实战

批量数据处理是Excel自动化最常见的应用场景。假设有一个场景:需要将多个Excel文件中的数据合并到一个汇总表中。使用openpyxl可以轻松实现这个功能。首先,遍历文件夹中的所有Excel文件,逐个打开并读取数据;然后,将数据写入汇总表;最后保存汇总表。整个过程可以完全自动化,无需人工干预。

以下是一个完整的Excel合并示例代码:

┌────────────────────────────────────────────────────────────┐

│ import os

│ from openpyxl import Workbook, load_workbook

│ def merge_excel_files(folder_path, output_file):

“””合并文件夹中所有Excel文件的数据“””

创建汇总工作簿

merged_wb = Workbook()

merged_ws = merged_wb.active

merged_ws.title = “汇总数据

header_written = False

遍历文件夹中的所有Excel文件

for filename in os.listdir(folder_path):

if filename.endswith(“.xlsx”) and not filename.startswith(“~$”):│

file_path = os.path.join(folder_path, filename)│

wb = load_workbook(file_path)

ws = wb.active

写入表头(只写一次)

if not header_written:

headers = [cell.value for cell in ws[1]]

merged_ws.append(headers)

header_written = True

写入数据行(跳过表头)

for row in ws.iter_rows(min_row=2, values_only=True):│

if any(row):跳过空行

merged_ws.append(row)

wb.close()

print(f”已合并: {filename}”)

保存汇总文件

merged_wb.save(output_file)

print(f”汇总完成,保存至: {output_file}”)

│ # 使用示例

│ merge_excel_files(“./data_files”, “汇总表.xlsx”)

└────────────────────────────────────────────────────────────┘

另一个常见场景是数据清洗和转换。例如,从系统导出的数据可能存在格式问题,如日期格式不统一、数字存储为文本、存在多余空格等。使用openpyxl可以编写脚本自动处理这些问题:遍历所有单元格,检查并修正数据格式,去除多余空格,转换数据类型等。相比手动处理,自动化脚本不仅效率更高,而且更加准确可靠。

三、自动生成报表

自动生成报表是Excel自动化的高级应用。在企业中,经常需要定期生成格式化的报表,如日报、周报、月报等。这些报表通常有固定的模板和格式要求,如果手动制作,需要花费大量时间进行格式调整和数据填充。使用openpyxl可以创建报表模板,然后通过脚本自动填充数据,生成格式化的报表。

以下是一个生成销售报表的示例代码,包含样式设置和图表创建:

┌────────────────────────────────────────────────────────────┐

│ from openpyxl import Workbook

│ from openpyxl.styles import Font, Alignment, Border, Side, PatternFill│

│ from openpyxl.chart import BarChart, Reference

│ def create_sales_report(data, output_file):

“””生成格式化的销售报表“””

wb = Workbook()

ws = wb.active

ws.title = “销售报表

定义样式

header_font = Font(bold=True, size=12, color=”FFFFFF”)│

header_fill = PatternFill(start_color=”4472C4″, end_color=”4472C4″)│

header_alignment = Alignment(horizontal=”center”, vertical=”center”)│

thin_border = Border(

left=Side(style=”thin”),

right=Side(style=”thin”),

top=Side(style=”thin”),

bottom=Side(style=”thin”)

)

写入表头

headers = [“产品名称“, “销售数量“, “销售金额“, “同比增长“]

for col, header in enumerate(headers, 1):

cell = ws.cell(row=1, column=col, value=header)

cell.font = header_font

cell.fill = header_fill

cell.alignment = header_alignment

cell.border = thin_border

写入数据

for row_idx, row_data in enumerate(data, 2):

for col_idx, value in enumerate(row_data, 1):

cell = ws.cell(row=row_idx, column=col_idx, value=value)│

cell.border = thin_border

cell.alignment = Alignment(horizontal=”center”)│

设置列宽

ws.column_dimensions[“A”].width = 20

ws.column_dimensions[“B”].width = 12

ws.column_dimensions[“C”].width = 15

ws.column_dimensions[“D”].width = 12

创建柱状图

chart = BarChart()

chart.type = “col”

chart.title = “销售金额对比

data_ref = Reference(ws, min_col=3, min_row=1, max_row=len(data)+1)│

cats_ref = Reference(ws, min_col=1, min_row=2, max_row=len(data)+1)│

chart.add_data(data_ref, titles_from_data=True)

chart.set_categories(cats_ref)

ws.add_chart(chart, “F2”)

wb.save(output_file)

print(f”报表已生成: {output_file}”)

│ # 使用示例

│ sales_data = [

[“产品A”, 150, 45000, 0.15],

[“产品B”, 200, 60000, 0.22],

[“产品C”, 180, 54000, 0.08]

│ ]

│ create_sales_report(sales_data, “销售报表.xlsx”)

└────────────────────────────────────────────────────────────┘

四、实用代码示例

下面再分享一个数据清洗的实用示例,用于处理常见的Excel数据问题:

┌────────────────────────────────────────────────────────────┐

│ from openpyxl import load_workbook

│ from datetime import datetime

│ def clean_excel_data(file_path):

“””清洗Excel数据:去除空格、统一格式、处理空值“””

wb = load_workbook(file_path)

ws = wb.active

for row in ws.iter_rows():

for cell in row:

if cell.value is None:

continue

字符串处理:去除首尾空格

if isinstance(cell.value, str):

cell.value = cell.value.strip()

尝试转换为数字

try:

cell.value = float(cell.value)

except ValueError:

pass

日期格式统一

if isinstance(cell.value, datetime):

cell.number_format = “YYYY-MM-DD”

wb.save(file_path)

print(f”数据清洗完成: {file_path}”)

│ # 使用示例

│ clean_excel_data(“原始数据.xlsx”)

└────────────────────────────────────────────────────────────┘

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 第六期:Excel自动化处理——让数据工作事半功倍

评论 抢沙发

1 + 4 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮