openpyxl操作excel:调整行和列

调整行和列

在 Excel 中,调整行和列的大小非常容易,只要点击并拖动行的边缘,或列的 头部。但如果你需要根据单元格的内容来设置行或列的大小,或者希望设置大量电 子表格文件中的行列大小,编写 Python 程序来做就要快得多。 行和列也可以完全隐藏起来。或者它们可以“冻结”,这样就总是显示在屏幕上,如果打印该电子表格,它们就出现在每一页上(这很适合做表头)。 

 

1、设置行高和列宽

Worksheet 对象有 row_dimensions column_dimensions 属性,控制行高和列宽。 举个栗子:

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.get_active_sheet()
sheet['A1'] = 'Tall row'
sheet['B2'] = 'Wide column'
sheet.row_dimensions[1].height = 70 # 设置行高
sheet.column_dimensions['B'].width = 20 # 设置类宽
wb.save(r'C:\Users\Cherry\Desktop\dimensions.xlsx')

查看excel效果如下:

工作表的 row_dimensions 和 column_dimensions 是像字典一样的值,row_ dimensions 包含 RowDimension 对象,column_dimensions 包含 ColumnDimension 对象。 在row_dimensions 中,可以用行的编号来访问一个对象(在这个例子中,是 1或2)。在 column_dimensions 中,可以用列的字母来访问一个对象(在这个例子中,是 A或B)。 

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

 

2、合并和拆分单元格

(1)合并单元格:利用 merge_cells()工作表方法,可以将一个矩形区域中的单元格合并为一个单元格。

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.get_active_sheet()
sheet.merge_cells('A1:D3')  # 合并单元格
sheet['A1'] = 'Twelve cells merged together.'
sheet.merge_cells('C5:D5')
sheet['C5'] = 'Two merged cells.'
wb.save(r'C:\Users\Cherry\Desktop\dimensions.xlsx')

查看excel效果如下:

(2)拆分单元格:要拆分单元格,就调用 unmerge_cells()工作表方法。

import openpyxl
wb = openpyxl.load_workbook(r'C:\Users\Cherry\Desktop\dimensions.xlsx')
sheet = wb.get_active_sheet()
sheet.unmerge_cells('A1:D3')  # 拆分单元格
sheet.unmerge_cells('C5:D5')
wb.save(r'C:\Users\Cherry\Desktop\dimensions.xlsx')

查看excel效果如下:

 

3、冻结窗格

对于太大而不能一屏显示的电子表格,“冻结”顶部的几行或最左边的几列,是很有帮助的。例如,冻结的列或行表头,就算用户滚动电子表格,也是始终可见的。 这称为“冻结窗格”。在 OpenPyXL 中,每个 Worksheet 对象都有一个 freeze_panes 属性,可以设置为一个 Cell 对象或一个单元格坐标的字符串。请注意,单元格上边的所有行和左边的所有列都会冻结,但单元格所在的行和列不会冻结。

要解冻所有的单元格,就将 freeze_panes 设置为 None 或'A1'。表 12-3 展示了 freeze_panes 设定的一些例子,以及哪些行或列会冻结。 如下:

举个栗子:

冻结第一行,使第一行永远可见

import openpyxl
wb = openpyxl.load_workbook(r'C:\Users\Cherry\Desktop\produceSales.xlsx')
sheet = wb.get_active_sheet()
sheet.freeze_panes = 'A2' # 冻结第一行,则第一行永远可见
wb.save(r'C:\Users\Cherry\Desktop\produceSales.xlsx')

执行前,查看excel效果如下:

执行后,查看excel效果如下:

 

posted @ 2019-01-12 17:39  风聆  阅读(330)  评论(0)    收藏  举报