You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
importopenpyxlimportpylightxlimportxlrddefopenpyxl_count(path):
""" Counts the number of rows in an Excel file with openpyxl. """wb=openpyxl.load_workbook(path)
sheet=wb.activereturnsheet.max_rowdefpylightxl_count(path):
""" Counts the number of rows in an Excel file with pylightxl. """db=pylightxl.readxl(path)
ws=db.ws(db.ws_names[0])
returnws.maxrowdefxlrd_count(path):
""" Counts the number of rows in an Excel file with xlrd. """wb=xlrd.open_workbook(path)
sheet=wb.sheet_by_index(0)
returnsheet.nrowsif__name__=='__main__':
excel_path='sample.xlsx'print(openpyxl_count(excel_path))
print(pylightxl_count(excel_path))
print(xlrd_count(excel_path))
结果很奇怪, openpyxl得出14行的结论, 其他两个工具结论正确10, 实际上使用 MS office 打开也确实显示只有10行
哪里出问题了呢? 我拆开这个文档, 查了下xml文件, 发现后四行确实是存在的, 只不过没有内容
也就是说从视觉上看openpyxl是错的, 但从真实数据上看他又是对的
甲方客户可不管真实底层数据的情况, 他只关心他给你了 N 行数据, 结果你给人整了 M 行, 此为坑也
测试 Excel: sample.xlsx 这个 Excel 实际只有 10 行
代码(分别使用了
openpyxl/pylightxl/xlrd
来计算示例文件的行数):结果很奇怪,
openpyxl
得出14
行的结论, 其他两个工具结论正确10
, 实际上使用 MS office 打开也确实显示只有10
行哪里出问题了呢? 我拆开这个文档, 查了下
xml
文件, 发现后四行确实是存在的, 只不过没有内容也就是说从视觉上看
openpyxl
是错的, 但从真实数据上看他又是对的甲方客户可不管真实底层数据的情况, 他只关心他给你了 N 行数据, 结果你给人整了 M 行, 此为坑也
排坑无非两个方案: 要么换库, 要么把源文件改造一下
我选改造源文件, 即遍历 Excel 前先把
xml
中隐藏的空值行全干掉, 这样就欧了, 同时也提了个 issue 给openpyxl
项目: https://foss.heptapod.net/openpyxl/openpyxl/-/issues/1806但官方不认为这是个 bug, 因为 xml 文件确实是有内容的, 只不过是几个空行, 尴尬
The text was updated successfully, but these errors were encountered: