在IC设计、验证、后端中经常会用Excel来做配置文件、寄存器表、定义后端SDC参数等,不管Excel好不好用,但学习成本低啊。
Excel文件的结构
Excel文件主要由工作簿(book)、工作表(sheet)、单元格(cell)组成。一个Excel文件就是一个工作簿。一个工作簿可以有N个工作表。每个工作表由N行xM列个单元格组成,行通常用阿拉伯数字编号,列用英文字母编号。
Excel文件还包括其它辅助信息,如格式、合并、宏、VBA等。
用xlrd读Excel的基本操作
xlrd是读Excel应用最广泛的第三方库之一,安装方法:
pip3 install xlrd
以下图的Excel文件为例,介绍读取的方法:
Step 1
读Excel文件的第一步是打开工作簿:
import xlrd
Step 2
第二步是打开工作表,'Sheet1'。
sheets = book.sheet_name()
# ['Sheet1', 'Sheet2']
sheets_num = len(book.sheet_name())
# 2
0)
Step 3
从单元格里读数据。先来看看一共有多少行、多少列。
# 5
打印出所有单元格的数据:
for row
读取内容与预期一致。
注意:
- 索引从0开始
- 合并单元格,只能从左上角的单元格里读出,其余单元格读出的是空字符
''
- 空单元格(没值的),读取的也是空字符串
''
我们可以进一步通过判断单元格值的类型来确认:
for row
ctype的值与含义:
- 0 - 空
- 1 - 字符串
- 2 - 数字
- 3 - 日期
- 4 - 布尔型
可以看出,单元格数据的类型确实与打印的数值一致。
但有一个问题,无法区分是空值和合并单元格。
读取合并单元格
在实际项目中,有时候我们希望能够
- 判断是否是合并单元格,
- 跳过合并单元格(得到合并单元格的边界)。
其实,在xlrd的sheet里,已经读取了合并单元格的信息。只需要在open_workbook()
时打开选项:
'test.xls', formatting_info=
返回了两个元组,就是两个合并单元格。含义:(start_row, end_row, start_col, end_col)
注意:与python语法一致,不包括end行或列。
那么我们可以写两个函数来把这个列表封装一下:
def isMergedCell(row, col):
是不是很方便?通过这段代码,我们知道cell(4,2)
只是空值,不是合并单元格。也轻松获取了合并单元格的边界。
总结
在理解了Excel的存储结构后,xlrd的使用就显得非常方便。另外,xlrd不仅可以读取xls,也可以读取xlsx(就是说xlrd可以兼容新老版本的Excel)。