Excel自动化
1.安装与导入模块
`
pip install openpyxl
`
2.读取和处理数据
#读取数据
import pandas as pd
data = pd.read_excel('./data.xlsx')
data
其中每一列的含义如下:
InvoiceNo:发票编号
StockCode:产品代码
Description:产品名称
Quantity:产品数量
InvoiceDate:开票时间
UnitPrice:产品单价
CustomerID:客户编号
Country:国家名称
为了统计每天的销售额,我们先在数据中增加两列:日期和销售额,然后用函数实现汇总:
#转化数据格式
data['InvoiceDate'] = pd.to_datetime(data['InvoiceDate'])
#提取出日期
data['日期'] = data.InvoiceDate.dt.date
#计算销售额
df['销售额'] = df.Quantity * df.UnitPrice
#汇总每天的销售额
daily_sum = pd.DataFrame(data.groupby('日期')['销售额'].agg('sum')).reset_index()
daily_sum
3.设置和保存报表
接下来,我们对表格进行相应的设置,包括:重命名工作表、把数据写入工作表、自定义标题和表格边框样式、设置行高和列宽、不显示网格线、冻结窗格、自动筛选、设置日期和数字格式等等
from openpyxl.utils.dataframe import dataframe_to_rows
from openpyxl.styles import Font, Color, NamedStyle, Border, Side, PatternFill, Alignment, numbers
# 创建工作簿
wb = openpyxl.Workbook()
# 激活工作表
ws = wb.active
# 重命名工作表
ws.title = '每日销售额'
# 把数据写入工作表
for row in dataframe_to_rows(df_daily, index=False, header=True):
ws.append(row)
# 创建自定义的标题样式
mytitle = NamedStyle(name='mytitle')
mytitle.font = Font(bold=True, size=11, color='FFFFFF')
bd = Side(style='thin', color='A6A6A6')
mytitle.border = Border(left=bd, top=bd, right=bd, bottom=bd)
mytitle.fill = PatternFill('solid', fgColor='00589F')
mytitle.alignment = Alignment(horizontal='left', vertical='center')
wb.add_named_style(mytitle)
# 创建自定义表格边框样式
myborder = NamedStyle(name='myborder')
myborder.font = Font(bold=False, size=11, color='000000')
bd = Side(style='thin', color='A6A6A6')
myborder.border = Border(left=bd, top=bd, right=bd, bottom=bd)
myborder.alignment = Alignment(vertical='center')
wb.add_named_style(myborder)
# 应用标题样式
for cell in ws[1]:
cell.style = mytitle
# 对表格区域加边框
from openpyxl.utils import get_column_letter, column_index_from_string
table_range = ws['A2:' + get_column_letter(ws.max_column) + str(ws.max_row)]
for row in table_range:
for cell in row:
cell.style = myborder
# 设置行高和列宽
ws.row_dimensions[1].height = 26
ws.column_dimensions['A'].width = 15
ws.column_dimensions['B'].width = 12
# 设置不显示网格线
ws.views.sheetView[0].showGridLines = False
# 冻结窗格
ws.freeze_panes = 'A3'
# 自动筛选
ws.auto_filter.ref = 'A1:' + get_column_letter(ws.max_column) + str(ws.max_row)
# 设置对齐格式
for cell in ws['A']:
cell.alignment = Alignment(horizontal='center', vertical='center')
# 设置日期格式
for cell in ws['A']:
cell.number_format = numbers.FORMAT_DATE_YYYYMMDD2
# 设置数字格式
for cell in ws['B']:
cell.number_format = numbers.BUILTIN_FORMATS[3]
最后,保存自动生成的 Excel 报表文件:
# 保存为新的表格
wb.save('./每日销售报表.xlsx')
打开这个新生成的 Excel 报表文件,其中的内容如下:
rs.BUILTIN_FORMATS[3]
最后,保存自动生成的 Excel 报表文件:
```python
# 保存为新的表格
wb.save('./每日销售报表.xlsx')
打开这个新生成的 Excel 报表文件,其中的内容如下: