1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > python中xlrd模块的用法_用xlrd模块读取合并单元格(merged cell)

python中xlrd模块的用法_用xlrd模块读取合并单元格(merged cell)

时间:2020-03-22 20:04:33

相关推荐

python中xlrd模块的用法_用xlrd模块读取合并单元格(merged cell)

Python的第三方模块xlrd,用来读取.xls文件,从模块名就可以看出,只能用来读。本文介绍使用xlrd模块读取合并单元格(merged cells)的技巧。

测试用带合并单元格的.xls文件

文件名依然是xlrd_test.xls,合并单元格使用sheet 123:

合并单元格

excel文件的行是从1开始,列是从字母A开始。xlrd模块的行和列,都是从0开始,这比较符合程序员的思维。

读取合并单元格里的cell

测试.xls文件有一些cell本合并了,不过,我们还是试着读一下这些cell,请看下面的代码:

>>> book = xlrd.open_workbook('xlrd_test.xls')

>>> sh = book.sheet_by_name('123')

>>> sh.name

'123'

>>> sh.nrows

4

>>> sh.ncols

4

>>> sh.cell_value(1,0)

'2b'

>>> sh.cell_value(1,1)

''

>>> sh.cell_value(2,0)

'3c4d'

>>> sh.cell_value(2,1)

''

>>> sh.cell_value(3,0)

''

>>> sh.cell_value(3,1)

''

>>> sh.cell_value(2,2)

34.0

>>> sh.cell_value(3,2)

''

>>> sh.merged_cells

[]

这段代码先打开.xls文件,然后选择123 sheet,看看sheet的名称,行列数量,然后一个个将合并单元格的cell值都读取出来。我们可以发现一个规律,每一个合并单元格,只有左上角的那个cell(行列最小)能够读出值,其它cell都是empty。这就是xlrd模块读取合并单元格的特点。

获取merged_cells

上面的代码,merged_cells是一个空的list,现在我们来让它有内容:

>>> book = xlrd.open_workbook('xlrd_test.xls', formatting_info=True)

>>> sh = book.sheet_by_name('123')

>>> sh.merged_cells

[(1, 2, 0, 2), (2, 4, 2, 3), (2, 4, 0, 2)]

在打开.xls的open_workbook函数中,加入一个formatting_info=True这样的参数,这样就可以获得sheet的merged_cells信息。

merged_cells是一个list,list中每隔元素时tuple,每隔tuple有4个值,仔细观察,这4个值分别是row和col的index。我们可以写一段下面的代码,来遍历每隔合并单元格里的cell:

判断cell是否在合并单元格内

对于任意cell,我们只需要将其row和col值拿来跟merged_cells进行某种方式的比较,就可以判断这个cell是否在合并单元格内。请看如下代码:

如何处理合并单元格里的空cell

从上面的内容,我们可以看到,合并单元格,只有左上角的那个cell能够读取到正常的值,其它cell的值都是空。我们也有了inMerged函数,来判断cell是否在合并单元格内。这些为空的cell,其实并不是正的empty,我们在处理excel文件的时候,他们都是有值的,只是因为值一样,为了方便处理,我们将其合并了。

我们可以写一点代码,来读取这些值为空的cell的真正的值:

cell_real_value函数的逻辑与inMerged一样,首先判断cell是否在某个合并单元格内,如果是,返回这个合并单元格左上角的那个cell的值,如果不是,直接调用cell_value() 函数获取值。因此,获取合并单元格内cell的类型等其它信息,也与此方法一致。

差不多了,以上即是对使用xlrd模块处理.xls文件中的合并单元格的介绍。

-- EOF --

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。