一般xlsx文件都有合并单元格,这些格子的内容一样,就没有必要让相同的数据多次出现,而且合并之后也更好看。openpyxl提供了一些接口,可以供我们分析xlsx文件的合并单元格,在自动化处理表格的过程中很有用。
merge的基础知识
xlsx文件合并单元格的时候,如果多个格子都有数据,只会保留左上角的格子数据作为合并之后单元格的数据。
合并单元格只保留左上角的数据
因此,使用openpyxl读取合并单元格的数据时,除了左上角的格子有数据,其它被合并的格子都没有数据!比如从A1到C1合并了,A1有数据,B1和C1是None。
如果对已经merged的区域做unmerge操作,还是只有左上角的格子有数据,其它格子都是None
ws.merged_cells.ranges
openpyxl的这个接口ws.merged_cells.ranges可以获取整个sheet中,所有merged cells。
>>> ws.merged_cells.ranges
[, ]
>>> ws.merged_cells.ranges[0]
>>> ws.merged_cells.ranges[1]
>>> ws.merged_cells.ranges[0].left
[(1, 2)]
>>> ws.merged_cells.ranges[0].right
[(1, 3)]
>>> ws.merged_cells.ranges[0].max_col
3
>>> ws.merged_cells.ranges[0].min_col
2
>>> ws.merged_cells.ranges[0].max_row
1
>>> ws.merged_cells.ranges[0].min_row
1
>>> ws.merged_cells.ranges[0].size
{'columns': 2, 'rows': 1}
以上这些数据,都可以被我们利用来判断某个具体的cell,是否在一个merged区域里面,然后我们就知道,它的值与这个区域左上角的cell value一样。
另外,openpyxl还可以可以通过编程实现merge和unmerge的功能,接口分别是ws.merge_cells和ws.unmerge_cells。
-- EOF --