
1.今天主要的问题集中在打包上,但最后发现问题竟然不是打包,开始我测试代码,一切正常,然后一打包,突然就无法读excel了,我上网一搜,确实有相关问题,导致我更加相信是打包的问题,网上说pyinstaller只支持特定版本的openpyxl,而且版本比较低,2.3.X的,我一看我的版本,已经到了3.0,我一下子心灰意冷了,各种百度,各种查,最后也没找到好的解决办法,于是又尝试其它模块,比如xlrd,但是xlrd也有个问题,说是2.0以后只支持xls文档,不支持xlsx文档,而我要读xlsx文档,也不行,换低版本吧,pandas又依赖高版本的,给我直接整傻了,一天都在试图找到新的解决方案,最后终于找到一个能用的,xlwings,但是这东西直接操作office软件,功能确实强大,但我真不想用,没办法,现在只能用这个。
虽然暂时解决了问题,但我还是耿耿于怀打包的问题,于是又是一顿百度,摆着摆着,突然找到一篇博客,说是可能是xlsx文档被加密了,我恍然大悟,虽然不是他说的加密,但我突然想起来公司的excel是加密的,之所以我测试时没问题,是因为之前找it部门加过白名单,python是可以读的,但是打包成exe,这个新的软甲就读不了了,一顿报错,之所以用xlwings不报错,是因为它是直接调用本地的office,这个本来就是可以的,唉,难受,搞了半天,原来不是打包的问题,是文档的问题。但是这个是公司规定,虽然代码没问题,打包么问题,但是策略没法改变,只能先用xlwings顶一阵了,读取也要改成xlwings,用xlwings读取全部数据并组成dataframe,代码如下:
def create_dataframe_by_xw(excel_f):
app = xw.App(visible=False, add_book=False)
wb = app.books.open(excel_f)
ws = wb.sheets.active
sht = wb.sheets[0]
all_data = sht.range('a1').expand().value
print(all_data[0])
df = pd.DataFrame(all_data[1:],columns=all_data[0])
return df