>>> from helper import info; info()
页面更新时间: 2020-03-21 22:40:29
操作系统/OS: Linux-4.19.0-8-amd64-x86_64-with-debian-10.3 ;Python: 3.7.3
调整行和列¶
在 Excel中,调整行和列的大小非常容易,只要点击并 拖动行的边缘,或列的头部。但如果你需要根据单元格 的内容来设置行或列的大小,或者希望设置大量电子表 格文件中的行列大小,编写Python程序来做就要快得多。
行和列也可以完全隐藏起来。或者它们可以“冻结”, 这样就总是显示在屏幕上,如果打印该电子表格, 它们就出现在每一页上(这很适合做表头)。
设置行高和列宽¶
Worksheet
对象有 row_dimensions
和 column_dimensions
属性,控制行高和列宽。 在交互式环境中输入以下&码:
>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>> sheet['A1'] = 'Tall row'
>>> sheet['B2'] = 'Wide column'
>>> sheet.row_dimensions[1].height = 70
>>> sheet.column_dimensions['B'].width = 20
>>> wb.save('dimensions.xlsx')
工作表的 row_dimensions
和 column_dimensions
是像字典一样的值,row_dimensions
包含RowDimension
对象,column_dimensions
包含 ColumnDimension
对象。 在
row_dimensions
中,可以用行的编号来访一个对象
(在这个例子中,是1或)。在 column_dimensions
中,
可以用列的字母来访问一个对象(在这个例子中,是A或B)。
一旦有了 RowDimension
对象,就可以设置它的高度。 一旦有了
ColumnDimension
对象,就可以设置它的宽度。
行的高度可以设置为0到409之间的整数或浮点值。这个值表示
高度的点数。一点等于1/72英寸。默认的行高是12.75。列宽
可以设置为0到255之间的整数或浮点数。这个值表示使用默认
字体大小时(11点),单元格可以显示的字符数。默认的列宽
是8.43个字符。列宽为零或行高为零,将使单元格隐藏。
合并和拆分单元格¶
利用 merge_cell()
工作表方法,可以将一个矩形区域
中的单元格合并为一个单元格。在交互式环境中输入以下代码:
>>> import openpyxl
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>> sheet.merge_cells('A1:D3')
>>> sheet['A1'] = 'Twelve cells merged together.'
>>> sheet.merge_cells('C5:D5')
>>> sheet['C5'] = 'Two merged cells.'
>>> wb.save('merged.xlsx')
merge_cell()
的参数是一个字符串,表示要合并的
矩形区域左上角和右下角的单元格:'A1:D3'
将12个
单元格合并为一个单元格。要设置这些合并后单元格的值,
只要设置这一组合并单元格左上角的单元格的值。
如果运行这段代码, merged.xlsx
。
要拆分单元格,就调用 unmerge_cells()
工作表方法。
在交互式环境中输入以下代码:
>>> import openpyxl
>>> wb = openpyxl.load_workbook('merged.xlsx')
>>> sheet = wb.active
>>> sheet.unmerge_cells('A1:D3')
>>> sheet.unmerge_cells('C5:D5')
>>> wb.save('merged.xlsx')
如果保存变更,然后查看这个电子表格,就会看到合并的 单元格恢复成一些独立的单元格。
冻结窗格¶
对于太大而不能一屏显示的电子表格,“冻结”顶部的几行
或最左边的几列,是很有帮助的。例如,冻结的列或行表头,
就算用户滚动电子表格,也是始终可见的。这称为“冻结窗格”。 在 OpenPyXL
中,每个 Worksheet
对象都有一个 freeze_panes
属性,可以设置为一个 Cell
对象或
一个单元格坐标的字符串。请注意,单元格上边的所有行和
左边的所有列都会冻结,但单元格所在的行和列不会冻结。
要解冻所有的单元格,就将 freeze_panes
设置为 None
或 'A1'
。表12-3展示了 freeze_panes
设定的一些例子,以及哪些行或列会冻结。
表12-3 冻结窗格的例子
freeze_panes 的设置 |
冻结的行和列 |
---|---|
sheet. freeze_panes = ‘A2’ |
行1 |
sheet.freeze_panes = ’B1’ |
列A |
sheet. freeze_panes = ‘C1’ |
列A和列B |
sheet. freeze_panes = ‘C2’ |
行1和列A和列B |
sheet.freeze_panes = ’A1’或 sheet. freeze_panes = None |
没有冻结窗格 |
确保你有来自 http://nostarch.com/automatestuff/ 的产品销售电子表格。然后在交互式环境中输入以下代码:
>>> import openpyxl
>>> wb = openpyxl.load_workbook('produceSales.xlsx')
>>> sheet = wb.active
>>> sheet.freeze_panes = 'A2'
>>> wb.save('freezeExample.xlsx')
如果将 freeze_panes
属性设置为 'A2'
,
行1将永远可见,无论用户将电子表格滚动到何处。 将 reeze_panes
设置为
'A2'
,行1 将永远可见,无论用户如何向下滚动
图表¶
openpyxl
支持利用工作表中单元格的数据,
创建条形图、折线图、散点图和饼图。要创建 图表,需要做下列事情:
从一个矩形区域选择的单兀格,创建一个
Reference
对象。通过传入
Reference
对象,创建一个Series
对象。创建一个
Chart
对象。将
Series
对象添加到Chart
对象。可选地设置
Chart
对象的drawing.top
、drawing.left
、drawing.width
和drawing.height
变量。将
Chart
对象添加到Worksheet
对象。
Reference
对象需要一些解释。Reference
对象是通过调用
openpyxl.charts.Reference()
函数并传入3个参数创建的:
包含图表数据的
Worksheet
对象。两个整数的元组,代表矩形选择区域的左上角单元格,该区域包含图表数据:元组中第一个整数是行,第二个整数是列。请注意第一行是1,不是0。
两个整数的元组,代表矩形选择区域的右下角单元格,该区域包含图表数据:元组中第一个整数是行,第二个整数是列。
在交互式环境中输入以下代码,创建一个条形图, 将它添加到电子表格中:
>>> import openpyxl, os
>>>
>>> wb = openpyxl.Workbook()
>>> sheet = wb.active
>>> for i in range(1, 11): # Create some data in column A
>>> sheet['A' + str(i)] = i
>>>
>>> refObj = openpyxl.chart.Reference(sheet, min_row=1, min_col=1, max_row=10, max_col=1)
>>>
>>> seriesObj = openpyxl.chart.Series(refObj, title='First series')
>>>
>>> chartObj = openpyxl.chart.BarChart()
>>>
>>> chartObj.title = 'My Chart'
>>>
>>> chartObj.append(seriesObj)
>>>
>>> sheet.add_chart(chartObj, 'C5')
>>>
>>> wb.save('sampleChart.xlsx')
得到的电子表格
我们可以调用 openpyxl.charts.BarChart()
,
创建一个条形图。也可以调用
openpyxl.charts.LineChart()
、openpyxl.charts.ScatterChart()
和openpyxl.charts.PieChart()
, 创建折线图、散点图和饼图。
遗憾的是,在 OpenPyXL
的当前版本中(2.1.4), load_workbook()
不会加载Excel文件中的图表。 即使Excel文件包含图表,加载的 Workbook
对象也不会包含它们。如果加载一个 Workbook
对象,
然后马上保存到同样的 .xlsx
文件名中,实际上就会删除其中的图表。