python 调整行和列

在 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)。 dimensions.xlsx 电子表格如图 12-6 所示。 

一旦有了RowDimension对象,就可以设置它的高度。一旦有了ColumnDimension对 象,就可以设置它的宽度。行的高度可以设置为 0 到 409 之间的整数或浮点值。这 个值表示高度的点数。一点等于 1/72 英寸。默认的行高是 12.75。列宽可以设置为 0 到255 之间的整数或浮点数。这个值表示使用默认字体大小时(11 点),单元格可以显 示的字符数。默认的列宽是 8.43 个字符。列宽为零或行高为零,将使单元格隐藏。 

合并和拆分单元格 

利用 merge_cells()工作表方法,可以将一个矩形区域中的单元格合并为一个单 元格。在交互式环境中输入以下代码: 

>>> 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_cells()的参数是一个字符串,表示要合并的矩形区域左上角和右下角的 单元格:'A1:D3'将 12 个单元格合并为一个单元格。要设置这些合并后单元格的值, 只要设置这一组合并单元格左上角的单元格的值。 如果运行这段代码,merged.xlsx 看起来如图 12-7 所示。

要拆分单元格,就调用 unmerge_cells()工作表方法。在交互式环境中输入以下 代码: 

>>> import openpyxl 
>>> wb = openpyxl.load_workbook('merged.xlsx') 
>>> sheet = wb.get_active_sheet() 
>>> 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 设定的一些例子,以及哪些行或列会冻结。 

确保你有来自 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 将永远可见,无论用户将电子表格滚 动到何处,如图 12-8 所示。 

图表 

openpyxl 支持利用工作表中单元格的数据,创建条形图、折线图、散点图和饼 图。要创建图表,需要做下列事情:

1.从一个矩形区域选择的单元格,创建一个 Reference 对象。

2.通过传入 Reference 对象,创建一个 Series 对象。

3.创建一个 Chart 对象。

4.将 Series 对象添加到 Chart 对象。

5.可选地设置Chart对象的drawing.top、drawing.left、drawing.width和drawing.height 变量。

6.将 Chart 对象添加到 Worksheet 对象。

Reference 对象需要一些解释。Reference对象是通过调用 openpyxl.charts. Reference() 函数并传入 3 个参数创建的:

1.包含图表数据的 Worksheet 对象。

2.两个整数的元组,代表矩形选择区域的左上角单元格,该区域包含图表数 据:元组中第一个整数是行,第二个整数是列。请注意第一行是 1,不是 0。

3.两个整数的元组,代表矩形选择区域的右下角单元格,该区域包含图表数 据:元组中第一个整数是行,第二个整数是列。 图 12-9 展示了坐标参数的一些例子。

 
 在交互式环境中输入以下代码,创建一个条形图,将它添加到电子表格中: 

>>> import openpyxl 
>>> wb = openpyxl.Workbook() 
>>> sheet = wb.get_active_sheet() 
>>> for i in range(1, 11):   # create some data in column A         
...    sheet['A' + str(i)] = i 
...
>>> refObj = openpyxl.chart.Reference(sheet, (1, 1), (10, 1)) 
>>> seriesObj = openpyxl.chart.Series(refObj, title='First series')  
>>> chartObj = openpyxl.charts.BarChart() 
>>> chartObj.append(seriesObj) 
>>> sheet.add_chart(chartObj) 
>>> 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 文件名中,实际上就会 删除其中的图表。 

猜你喜欢

转载自blog.csdn.net/dongyu1703/article/details/82291903