4

Python:Excel自动化实践入门篇 乙【送图书活动继续】 - ENG八戒

 1 year ago
source link: https://www.cnblogs.com/englyf/p/17166664.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Python:Excel自动化实践入门篇 乙【送图书活动继续】

*以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「englyf」https://mp.weixin.qq.com/s/y-npGelPJwmx3iNvHaXRTg


本文上接《Python:Excel自动化实践入门篇 甲》


正文开始之前,提醒一下朋友们,送图书的活动还在继续,朋友们请加紧时间点击 参与一下》,不要错过哦!


在处理 excel 表格数据时,经常会用到公式来对数据执行统计。那么自动化怎么统计呢?

直接把计算公式赋值给输出结果的单元格 cell,下面试一下计算区域数据的和

import openpyxl

workbook = openpyxl.Workbook()
sheet = workbook.active

sheet['A1'] = 100
sheet['A2'] = 200
sheet['A3'] = 300
sheet['A4'] = 400
sheet['A5'] = 500

sheet['A7'] = '= SUM(A1:A5)'

workbook.save("sum.xlsx")

看看实际效果

2962155-20230301013352918-916512110.jpg

调整行高和列宽

很多时候也需要对存储某些信息量的行列进行宽高调整,那么每个都要手动拖动拉伸就很令人苦恼了。这里介绍如何自动化设置行高和列宽。利用到修改单元格 cell 的属性 height 和属性 width 的值。

下面举个例子

import openpyxl
  
workbook = openpyxl.load_workbook("test.xlsx")
sheet = workbook.active

sheet.row_dimensions[6].height = 70
sheet.column_dimensions['C'].width = 20
  
workbook.save('test.xlsx')

看看实际效果

2962155-20230301013352942-355747377.jpg

这就是简单的调整行高和列宽,会影响到同一行或列的所有单元格。

合并单元格

有些表格中,部分区域的单元格可以作为同一个单元格使用,那么就可以对其执行合并操作了。

合并操作通过表格 sheet 的 merge_cells() 方法实现,下面看看代码

import openpyxl
  
workbook = openpyxl.load_workbook("test.xlsx")
sheet = workbook.active
sheet.merge_cells("B2:C4")
  
workbook.save('test.xlsx')

看看实际效果

2962155-20230301013352944-1878570997.jpg

可以看到原来区域 B2:C4 中都是分离的单元格,现在合并成一个单独的单元格了。

拆分单元格

和合并单元格相对的,也有需要对单元格拆分的时候。拆分单元格使用的是表格 sheet 的 unmerge_cells() 方法。

再对上面的表格中被合并的单元格执行拆分处理

import openpyxl
  
workbook = openpyxl.load_workbook("test.xlsx")
sheet = workbook.active
sheet.unmerge_cells("B2:C4")
  
workbook.save('test.xlsx')

看看实际效果

2962155-20230301013352958-911887387.jpg

现在又变回合并前的样子了

同样的,表格里的有些字体也是可能需要特别设置,对于查阅内容比较有帮助。可以通过 openpyxl 的 styles 模块的 Font() 方法执行配置。

下面试一下,把单元格 A1 的内容设置为字体大小 24,粗体,italic,字体名字为 ‘Times New Roman’

import openpyxl
from openpyxl.styles import Font
  
workbook = openpyxl.load_workbook("test.xlsx")
sheet = workbook.active

sheet.cell(row = 1,
            column = 1).font = Font(size = 24,
                                    italic = True,
                                    bold = True,
                                    name = 'Times New Roman')
  
workbook.save('test.xlsx')

看看实际效果

2962155-20230301013352932-833024111.jpg

为了让 excel 表格里的内容更加便于理解,离不开数据的可视化,excel 就提供了绘制图表的功能来体现数据可视化。表格中数据和绘制的图表关联之后,数据的变更也会自动同步到图表中。

现在就介绍用到自动化的方式来绘制图表,举个栗子,现在表格里插入一列数据,然后用 Reference() 选中表格中的数据域,创建柱状图表并关联刚选中的数据域,设置表头、xy轴标签,再生成图表,最后把工作簿保存到文件 sample.xlsx。

import openpyxl
from openpyxl.chart import BarChart
from openpyxl.chart import Reference

workbook = openpyxl.Workbook()
sheet = workbook.active

# 插入数据到表格 sheet
for i in range(10):
	sheet.append([i])
# 选中表格的数据域
values = Reference(sheet,
                    min_col = 1,
                    min_row = 1,
                    max_col = 1,
                    max_row = 10)

# 创建柱状图表
chart = BarChart()
# 关联数据域到图表
chart.add_data(values)
# 设置图表表头
chart.title = " 实例图标 "
chart.x_axis.title = " X 轴 "
chart.y_axis.title = " Y 轴 "
# 生成图表,并贴到单元格 C2
sheet.add_chart(chart, "C2")

workbook.save("sample.xlsx")

看看实际效果

2962155-20230301013352967-973890220.jpg

当然,除了可以生成柱状图,还可以生成饼状图、线状图等等,这里不展开了。

有些时候也需要往 excel 表格里插入图片,那么可以使用 openpyxl.drawing.image.Image 来实现。

由于 openpyxl.drawing.image.Image 依赖于第三方模块 pillow,所以在执行调试环境里还需要安装库 pillow。前面已经安装,这里略过。

试一下把下面的图插入新建的 excel 表格里

2962155-20230301013353255-103677211.jpg
import openpyxl
from openpyxl.drawing.image import Image

workbook = openpyxl.Workbook()
sheet = workbook.active

img = Image("beauty.jpg")
sheet.add_image(img, 'B2')

workbook.save("img.xlsx")

看看实际效果

2962155-20230301013353266-256463860.jpg

《Python:Excel自动化实践入门篇》的介绍就到此结束了。由于篇幅受限,本系列教程分成了下面几个部分,有兴趣的朋友可点击跳转查阅

《Python:Excel自动化实践入门篇 甲》

《Python:Excel自动化实践入门篇 乙》


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK