python处理excel之openpyxl

引用:https://www.cnblogs.com/programmer-tlh/p/10461353.html

创建exce

# 创建工作簿
wb = openpyxl.Workbook()

# 保存excel
wb.save('d:/test.xls')

打开已有excel

# 打开excel
wb = openpyxl.load_workbook("d:/test.xlsx")
# 打开sheet
ws = wb['test1']

储存数据

# 方式一:数据可以直接分配到单元格中(可以输入公式)
ws['A1'] = 'test'

# 方式二:可以附加行,从第一列开始附加(从最下方空白处,最左开始)(可以输入多行)
ws.append(['id', 'name', 'age'])

创建表(sheet)

# 方式一:插入到最后(default)
ws = wb.create_sheet('test2')
# 方式二:插入到指定的位置
ws = wb.create_sheet('test3', 0)
# 如果sheet名已存在,会在sheet名后面追加数字(如已有test、test1、test3,新创建的为test4)
ws = wb.create_sheet('test')

选择表(sheet)

# sheet 名称可以作为 key 进行索引
ws = wb['test']
ws1 = wb.get_sheet_by_name('test1')

查看表名(sheet)

# 显示所有表名
wb.sheetnames
['test3', 'test', 'test4', 'test1', 'Sheet', 'Sheet1', 'test2', 'test5']

# 判断表格是否存在
'test' in wb.sheetnames
True

删除工作表

# 方式一
wb.remove(sheet)
# 方式二
del wb[sheet]

访问单元格(cell)

单一单元格访问

# 方法一:没有值返回None
>>> c = ws['A1']
# 方法二:row 行,column 列,默认值
>>> d = ws.cell(4, 2, value=10)

多单元格访问

切片多单元格应当符合:从左到右,从上到下

# 获取某行
>>> ws['1']
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>)
# 获取某列
>>> ws['A']
(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>, <Cell 'Sheet1'.A3>, <Cell 'Sheet1'.A4>)

# A列到B列
>>> ws['A':'B']
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>, <Cell 'Sheet1'.A3>, <Cell 'Sheet1'.A4>), 
 (<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.B4>))
 
 # 第行到第4行
>>> ws['1':'4']
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>), 
 (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>), 
 (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>), 
 (<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>))
 
 # 单元格到单元格:一行中的某段
 >>> ws['A1':'B1']
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>),)

# 单元格到单元格:从左到右,从上到下
>>> ws['A1':'B2']
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>), 
 (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>))

# 不合法的姿势
>>> ws['A2':'B1']
()
>>> ws['B2':'A1']
()
>>> ws['B2':'A1':-1]
()

行列条件迭代

ws.iter_rowsws.iter_cols
四个可填参数:

  • min_row:最小行(默认为1)
  • max_row:最大行(默认为sheet最大值)
  • min_col:最小列(默认为1)
  • max_col:最大列(默认为sheet最大值)
# 指定范围(行 → 行)  与ws['A1':'C2']效果相同
>>> ws.iter_rows(min_row=1, max_col=3, max_row=2)
<generator object Worksheet._cells_by_row at 0x00000181E5939648> # 返回生成器
>>> tuple(ws.iter_rows(min_row=1, max_col=3, max_row=2))
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>), 
 (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>))
 
 # 指定范围(列 → 列)
 >>> tuple(ws.iter_cols(max_col=3, max_row=2))
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>),
 (<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>),
 (<Cell 'Sheet1'.C1>, <Cell 'Sheet1'.C2>))

所有行

返回生成器,行–>行

>>> ws.rows
<generator object Worksheet._cells_by_row at 0x00000181E597F448>
>>> tuple(ws.rows)
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>),
 (<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>), 
 (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>), 
 (<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>), 
 (<Cell 'Sheet1'.A5>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.C5>), 
 (<Cell 'Sheet1'.A6>, <Cell 'Sheet1'.B6>, <Cell 'Sheet1'.C6>))

所有列

返回生成器,列–>列

>>> tuple(ws.columns)
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.A2>, <Cell 'Sheet1'.A3>, <Cell 'Sheet1'.A4>, <Cell 'Sheet1'.A5>, <Cell 'Sheet1'.A6>), 
 (<Cell 'Sheet1'.B1>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.B6>), 
 (<Cell 'Sheet1'.C1>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.C4>, <Cell 'Sheet1'.C5>, <Cell 'Sheet1'.C6>))

保存数据

wb.save('d:/test.xlsx')

其他

改变 sheet 标签按钮颜色

ws.sheet_properties.tabColor = "1072BA"

设置行高和列宽

# 第2行行高
sheet.row_dimensions[2].height = 40
# C列列宽
sheet.column_dimensions['C'].width = 30

获取最大行,最大列

# 获得最大列和最大行
print(sheet.max_row)
print(sheet.max_column)

根据数字得到字母,根据字母得到数字

from openpyxl.utils import get_column_letter, column_index_from_string

# 根据列的数字返回字母
print(get_column_letter(2))  # B
# 根据字母返回列的数字
print(column_index_from_string('D'))  # 4

合并和拆分单元格

  • 所谓合并单元格,即以合并区域的左上角的那个单元格为基准,覆盖其他单元格使之称为一个大的单元格。
  • 相反,拆分单元格后将这个大单元格的值返回到原来的左上角位置。
# 合并单元格, 往左上角写入数据即可
sheet.merge_cells('B1:G1') # 合并一行中的几个单元格
sheet.merge_cells('A1:C3') # 合并一个矩形区域中的单元格
  • 合并后只可以往左上角写入数据,也就是区间中:左边的坐标。
  • 如果这些要合并的单元格都有数据,只会保留左上角的数据,其他则丢弃。换句话说若合并前不是在左上角写入数据,合并后单元格中不会有数据。
  • 以下是拆分单元格的代码。拆分后,值回到A1位置
sheet.unmerge_cells('A1:C3')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值