自动化办公Excel数据读取模块

概述

本文将介绍一个我简单实现的一个Excel数据读取模块,用于快速地读取Excel文件内容。使用者可以无需关注openpyxl的各种实现细节。

代码地址

代码地址:[代码地址](https://github.com/ZhengqiaoWang/codesnippet/blob/main/python/excel_oper.py)

代码使用示例

我们先提前准备一个Excel表:

https://github.com/ZhengqiaoWang/codesnippet/blob/main/python/resource/excel_oper.xls

Excel表结构

读取Excel文件

注意:使用如下代码读取Excel文件时会自动将xls格式的文件在同目录转换成xlsx格式(不影响源文件),因此如果同名目录有同名但后缀为.xlsx的文件可能会弹窗提示是否覆盖

以下代码见UT

1
2
3
4
5
6
7
8
9
10
from excel_oper import ExcelOper
XLSFilePath = r"python\resource\excel_oper.xls"
eo = ExcelOper(ExcelOper.translateToXLSX(XLSFilePath), 0)
eo.setStartLine(2).setEndLine(-2).registColGet("列one",
                                                2).registColGet("列six", 7)
i = 1
for row_record in eo.getDatas():
    assert(i == int(row_record["列one"]))
    assert(row_record["列six"] == ABC[i-1])
    i += 1

下面是详解:

1
eo = ExcelOper(ExcelOper.translateToXLSX(XLSFilePath), 0)

在这里,我们使用ExcelOper.translateToXLSXxls文件转换为xlsx文件。然后打开了第一个表(表索引为0)。

1
2
eo.setStartLine(2).setEndLine(-2).registColGet("列one",
                                                2).registColGet("列six", 7)

这里我们设置了从第2行开始读,读到倒数第2行(也就是21行)。设置要取列B和列G,列名分别是列one列six

Excel中第一列是A,第二列是B….第7列是G。而不是第一行中所写的列1…6

这里为什么用列one列six就是为了和第一行区分开,这个列名是自定义的,可以与表中的列名不一致,但要求唯一,即不能出现不同列但名一样的情况。这个列名将用来获取列的值。

然后我们就开始获取数据:

1
2
3
4
for row_record in eo.getDatas():
    print(row_record)
    print("列one:", int(row_record["列one"]))
    print("列six:", row_record["列six"])

在这里我们就可以通过dict来获取每行的数据了,值得注意的是,每行都是一个dict,其中的key则是我们刚刚自定义的列名,值则是个字符串,因此我们对于数字可能需要进行格式转换,正如上面的int一样。

于是我们就可以得到我们想要的结果了。