三、Openpyx工作表对象的属性和方法-1
工作表对象可以设置的属性和方法比较多,分成几次讲,本章先讲一下比较基础的。
开始!
常用的工作表属性
1. 设置工作表名称
worksheet.title = '工作表名'
2. 设置工作表标签颜色
worksheet.sheet_properties = '颜色代码‘
3. 隐藏或者显示工作表
worksheet.sheet_state = 参数
可选参数有:
- 'visible':显示
- 'hidden':隐藏
- 'veryHidden':深度隐藏
拓展
1. 什么叫 veryHidden
veryHidden我称它为深度隐藏,正常来说我们隐藏一个工作表后,鼠标右击工作表会弹出一个菜单,里面会有一个“取消隐藏”的选项,你可以选中想要取消隐藏的工作表然后点确定,该工作表就会重新出现。但当你设置成veryHidden,该工作表就不会出现在"取消隐藏"的框里。
2. 图文说明
-
在一个工作簿里新建三个工作表,如图1.
图1 -
把第二个表隐藏掉
-
打开VBA代码编辑器,点第三个表,然后设置如图2的选项,就可以把该表深度隐藏了。
图2 -
鼠标右击剩下的工作表,选中“取消隐藏”选项,在弹出的对话框里,只能看到普通隐藏的那个工作表,看不到深度隐藏的工作表,如图3。
图3 -
结论:如果想要让别人不是那么简单的就能看到自己隐藏的工作表,就使用veryHidden,毕竟不是每个人都会去打开VBA编辑器修改属性。
往单元格区域里写入数据
1. 一个一个单元格写入数据(两种写法)
# 目标:把python字符串写入A1单元格
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
# 第一种写法
ws['A1'].value = 'python'
# 第二种写法
ws.cell(row=1,column=1,value='python') # row , column 都可以省略不写,如下面一行
ws.cell(1,1).value = 'python'
2. 一行一行写入数据
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['存货名称','单位','数量']) # 写入一行数据
对于已有数据的工作表可以查看的属性
属性 | 含义 |
---|---|
worksheet.max_row | 数据区域的最大行号 |
worksheet.min_row | 数据区域的最小行号 |
worksheet.max_column | 数据区域的最大列号 |
worksheet.min_column | 数据区域的最小列号 |
列号返回的是数字,不是字母
实例
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['存货名称','单位','重量'])
ws.append(['A','kg',15])
ws.append(['B','kg',15])
ws.append(['C','kg',15])
ws.append(['D','kg',15])
print(ws.max_row) # 返回 5
print(ws.min_row) # 返回 1
print(ws.max_column) # 返回 3
print(ws.min_column) # 返回 1
wb.save('/Users/JunChen/Desktop/text.xlsx')
工作表中关于行和列的设置
1. 设置行高和列宽
设置行高
ws.row_dimensions[row].height = 25 # row 是行号
设置列宽
ws.column_demensions[col].width = 15.5 # col是列号,必须填的是字母.
实例
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['存货名称','单位','重量'])
ws.append(['A','kg','15'])
ws.append(['B','kg','15'])
ws.append(['C','kg','15'])
ws.append(['D','kg','15'])
# 设置列宽
for c in ['A','B','C']:
ws.column_dimensions[c].width = 15
# 设置行高
for r in range(1,6):
ws.row_dimensions[r].height = 30
wb.save('/Users/JunChen/Desktop/text.xlsx')
2. 插入行或者列
插入行
worksheet.insert_rows(index,amount)
插入列
worksheet.insert_cols(index,amount)
amount不填,默认为1
实例
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['存货名称','单位','重量'])
ws.append(['A','kg','15'])
ws.append(['B','kg','15'])
ws.append(['C','kg','15'])
ws.append(['D','kg','15'])
ws.insert_rows(3,2) # 在第三行前面插入两行
ws.insert_cols(2) # 在第2列前面插入一列
wb.save('/Users/JunChen/Desktop/text.xlsx')
3. 删除行或者列
删除行
worksheet.delete_rows(index,amount)
删除列
worksheet.delete_cols(index,amount)
amount不填默认为1
实例
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['存货名称','单位','重量'])
ws.append(['A','kg','15'])
ws.append(['B','kg','15'])
ws.append(['C','kg','15'])
ws.append(['D','kg','15'])
ws.delete_rows(2,2) # 从第二行开始,删除两行,删除第二行,第三行
ws.delete_cols(2) # 删除第二列
wb.save('/Users/junliangchen/Desktop/text.xlsx')
移动单元格区域
worksheet.move_range(cell_range, rows=0, cols=0, translate=False)
参数详解
- cell_range:要移动的单元格区域
- row:移动多少行
- 正数:向下移动
- 负数:向上移动
- cols:移动多少列
- 正数:向右移动
- 负数:想左移动
- translate:是否把公式也跟着移动
实例
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['存货名称','数量','单价'])
ws.append(['A',2,5])
ws.append(['A',2,5])
ws.append(['A',2,5])
ws.append(['A',2,5])
ws.append(['A',2,5])
ws['D1'].value = '金额'
# 添加公式
for r in range(2,7):
ws.cell(r,4).value = f"=B{r}*C{r}"
# 把A6:D6区域向下移动一行,再向右移动3列
ws.move_range('A6:D6',1,3,translate=True)
wb.save('/Users/JunChen/Desktop/text.xlsx')
translate 详解
当translate是True时,效果如图1
图1当translate是False,效果如图2
图2合并单元格和取消合并单元格
ws.merge_cells('A1:F1') # 合并单元格
ws.unmerge_cells() # 取消合并单元格
合并居中
通常都会有合并并且居中单元格的需求,比如:要实现A1:F1合并居中,可以先对A1单元格设置居中,然后合并A1:F1单元格,这样就可以实现合并居中的效果了。
import openpyxl
from openpyxl.styles import Alignment
wb = openpyxl.Workbook()
ws = wb.active
ws['A1'] = '销售明细表'
# 没有下面这一步是实现不了合并居中效果的
ws['A1'].alignment = Alignment(horizontal='center',vertical='center')
ws.merge_cells('A1:F1')
wb.save('/Users/JunChen/Desktop/text.xlsx')
冻结窗口
worksheet.freeze_panes = 'A2'
点到A2单元格然后按冻结窗口
组合(折叠)
如图所示的功能
组合图示
列组合
worksheet.column_dimensions.group(start, end=None, outline_level=1, hidden=False)
参数详解
- start:必须要有的参数,从那一列开始折叠
- end:前面是开始,这个是结束的列
- outline_level:组合分级
- hidden:是否把组合折叠起来,隐藏内容。
实例
import openpyxl
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['name','number','unit','price'])
ws.append(['A',2,5,0])
ws.append(['A',2,5,0])
ws.append(['A',2,5,0])
ws.append(['A',2,5,0])
ws.append(['A',2,5,0])
ws.append([])
ws.append(['A',1,2,3])
ws.column_dimensions.group('B','C')
wb.save(r'/Users/JunChen/Desktop/text.xlsx')
行组合
worksheet.row_dimensions.group(start, end=None, outline_level=1, hidden=False)
同上!