? ? ? ? 最近给客户线上平台做一个数据同步功能,客户从其它业务系统每日导出excel表,可能是xlsx,也可能是xls,字段格式是固定的,其中一个环节就是要先读取这些excel表数据,其它环节自然比excel读取复杂,但是都是业务逻辑,这里不描述,单记录一下excel读取问题。
? ? ? ? 调研之后发现,当前的高版本库,xlrd只支持xls格式文件,而openpyxl则支持xlsx文件,于是做了一个兼容,程序支持两种格式的excel文件读取。代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os.path
import sys
import openpyxl
import xlrd
def read_xlsx(filename: str):
workbook = openpyxl.load_workbook(filename)
worksheet = workbook.worksheets[0]
i = 0
for row in worksheet.iter_rows(values_only=True):
i += 1
if i > 1:
# 如果是真实业务程序代码, 这里常常会创建一个业务对象进行赋值
print(row)
def read_xls(filename: str):
wb = xlrd.open_workbook(filename=filename)
table = wb.sheets()[0]
row_count = table.nrows
col_count = table.ncols
for i in range(row_count):
if i == 0:
continue
# 如果是真实业务程序代码, 这里常常会创建一个业务对象进行赋值
for j in range(col_count):
print(table.cell_value(i, j))
def read_excel(filename: str):
if not os.path.isfile(filename):
print('%s is not existed!' % filename)
return
if filename.endswith('.xlsx'):
read_xlsx(filename)
elif filename.endswith('.xls'):
read_xls(filename)
else:
print('invalid file type of excel: ', filename)
def usage():
print('usage: ./excel_reader.py [excel文件路径]')
def main():
if len(sys.argv) < 2:
usage()
else:
read_excel(sys.argv[1])
if __name__ == '__main__':
main()
? ? ? ? 运行: python3 ./excel_reader.py ./test.xlsx,? 程序会报错,需要xlrd库和openpyxl库,于是我们需要安装这两个库:
pip install xlrd
pip install openpyxl
pip list?
? ? ? ? 之后再运行应该就可以正常读取excel数据了。
?