Python操作Excel——openpyxl使用笔记(5)

5  其他操作


5.1  合并单元格

有些Excel表格存在合并多个单元格的情况,此时可以使用工作表的merge_cells函数,例如合并第1~2行和1~2列:

import openpyxl
from openpyxl.comments import Comment
wb = openpyxl.load_workbook('./test.xlsx')
ws = wb.active
# merge cells
ws.merge_cells('A1:B2')
wb.save('./test.xlsx')
wb.close()

运行效果如下:
 

通常建议是合并以后,再向合并的单元格中填写内容,如果合并的多个单元格,每个里面都有内容,则执行合并操作后,以合并前左上角的单元格的内容作为合并后的内容,其他单元格的内容都会消失。
另外,如果合并单元格以后需要访问和修改该合并单元格的内容,则也应该使用合并前左上角单元格的位置索引,而其他单元格中的值不能被修改:

import openpyxl
from openpyxl.comments import Comment
wb = openpyxl.load_workbook('./test.xlsx')
ws = wb.active
# merge cells
ws['A1'].value='A1'
ws['B1'].value='B1'
ws['A2'].value='A2'
ws['B2'].value='B2'
ws.merge_cells('A1:B2')
ws['A1'].value='MC_A1'
print(ws['A2'].value) # print 'None'
# the line below will raise Exception
# ws['B2'].value='MC_B2'
wb.save('./test.xlsx')
wb.close()

运行效果如下:

另外,已经被其他单元格合并的单元格,不应该参与到其他的合并单元格操作,这种操作在openpyxl中运行没问题,但是当Excel尝试打开时会报错,以下是测试代码:

import openpyxl
wb = openpyxl.load_workbook('./test.xlsx')
ws = wb.active
ws.merge_cells('A1:B2')
ws.merge_cells('B2:C4')
wb.save('./test.xlsx')
wb.close()

显然B2这个单元格参与了两此单元格合并,程序运行正常,没有报错,但是尝试打开Excel文档时,会出现如下提示:

因此在合并单元格时需要格外小心。


5.2.    拆分单元格

有合并单元格,自然也有拆分单元格,函数名称也是对应的,即merge_cells函数,用于拆分已经合并的单元格,例如前面已经合并了A1~B2四个单元格的表格,拆分脚本如下:

import openpyxl
wb = openpyxl.load_workbook('./test.xlsx')
ws = wb.active
ws.unmerge_cells('A1:B2')
wb.save('./test.xlsx')
wb.close()

运行效果如下:

被拆分的单元格会分解为单个的单元格,拆分前的单元格中,如果有值的话,会保留在左上角的单元格中。

另外,如果一个单元格并不是可拆分的,则会产生错误:

ValueError: Cell range A1:B2 is not merged


5.3  插入图片

向工作表中插入图片,可以使用add_image函数,例如,图片和文件分别是image.png和test.xlsx,插入图片的脚本如下:

import openpyxl
from openpyxl.drawing.image import Image
wb = openpyxl.load_workbook('./test.xlsx')
ws = wb.active
img=Image('image.png')
ws.add_image(img, 'C2')
wb.save('./test.xlsx')
wb.close()

其中第一个参数是一个Image对象,而第二个参数是所插入的锚点,图像的左上角将和这个单元格的左上角对齐。上述脚本运行效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值