- 只能打开xlsx类型的excel文件
默认可读写,若有需要可以指定write_only
和read_only
为True
wb = openpyxl.load_workbook(filename)
返回一个workbook
对象,用于对excel的读取和写入
- 获取工作表的sheet列表
# 返回文件的所有sheet名
wb.sheetnames
['Sheet1', 'Sheet2', 'Sheet3']
- 获取工作sheet
sheet = wb[wb.sheetnames[0]]
- 添加sheet
wb.create_sheet('Data', index=1) # 名字 Data,位置为索引1的位置
- 读写单元格数据
sheet['A1'] = 'test'
sheet['B9'] = '=AVERAGE(B2:B8)'
sheet['A1'].value #test
cell = sheet['B4']
cell.row # 4 单元格行号
cell.column # 2 单元格列号
cell.column_letter # B 单元格列号 用字母表示
但是如果是读取的时候需要加上data_only=True
这样读到B9返回的就是数字,如果不加这个参数,返回的将是公式本身’=AVERAGE(B2:B8)’
- 添加行数据
append
可以一次添加多行数据,从第一行空白行开始(下面都是空白行)写入
# 添加一行
row = [1 ,2, 3, 4, 5]
sheet.append(row)
# 添加多行
rows = [
['Number', 'data1', 'data2'],
[2, 40, 30],
[3, 40, 25],
[4, 50, 30],
[5, 30, 10],
[6, 25, 5],
[7, 50, 10],
]
for row in rows:
sheet.append(row)
由于append函数只能按行写入。如果我们想按列写入呢。append能实现需求么?如果把上面的列表嵌套看作矩阵。只要将矩阵转置就可以了。
rows_zip = list(zip(*rows))
for row in rows_zip:
sheet.append(row)
- 删除整行整列
sheet.delete_rows(6) # 整行
sheet.delete_cols(6) # 整列
- 保存文件
wb.save(r'D:\example.xlsx')