鱼C论坛

 找回密码
 立即注册
查看: 3454|回复: 11

[已解决]openpyxl 模块相关

[复制链接]
发表于 2019-8-28 11:03:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近学习了openpyxl模块,写了个表格汇总小程序。确实可以提高工作效率。

但是使用过程中发现openpyxl好像只能读取2007版以上‘.xlsx’文档,有时县市区上报的却是".xls"文档需要逐个转换。

请问有没有好的解决方法?
最佳答案
2019-8-28 21:06:58
  1. import os
  2. import os.path
  3. import win32com.client as win32

  4. ## 根目录
  5. rootdir = u'C:\\Users\\Desktop\\111'
  6. # 三个参数:父目录;所有文件夹名(不含路径);所有文件名
  7. for parent, dirnames, filenames in os.walk(rootdir):
  8.     for fn in filenames:
  9.         filedir = os.path.join(parent, fn)
  10.         print(filedir)

  11.         excel = win32.gencache.EnsureDispatch('Excel.Application')
  12.         wb = excel.Workbooks.Open(filedir)
  13.         # xlsx: FileFormat=51
  14.         # xls:  FileFormat=56
  15.         wb.SaveAs(filedir.replace('xls', 'xlsx'), FileFormat=51)
  16.         wb.Close()                                 
  17.         excel.Application.Quit()
复制代码

你可以试试
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-28 11:19:45 | 显示全部楼层
openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old .xls file format, please use xlrd to read this file, or convert it to the more recent .xlsx file format.

这个xlrd怎么使用?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-28 11:21:04 | 显示全部楼层
xlwings也不错啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-28 12:40:07 | 显示全部楼层
试一试pandas
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-28 13:36:58 | 显示全部楼层

你就是个panda!
看了看功能还挺多的,可是不如openpyxl好用。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-28 18:45:20 | 显示全部楼层
本帖最后由 傻纸 于 2019-8-28 18:52 编辑

我倒是建议你这样处理
  1. from openpyxl import load_workbook
  2. import xlrd

  3. workbook=None
  4. book=None

  5. excelfile_path="test.xls"

  6. try:
  7.     workbook=load_workbook(excelfile_path)
  8. except:
  9.     try:
  10.         book=xlrd.open_workbook(excelfile_path)
  11.     except:
  12.         pass

  13. if workbook!=None:
  14.     #如果是xlsx则执行,添加openpyxl处理
  15.     print("a")
  16.    
  17. elif book!=None:
  18.     #如果是老版本xls则执行,添加xlrd处理
  19.     print("b")
  20. else:
  21.     #其他错误
  22.     print("无法正确读取文件")
复制代码

python库实在太多了,不用换来换去的感觉,openpyxl能够读取的还是用openpyxl读,不能读的再去增加一个xlrd。至于这个库怎么用,还是去看教程吧!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-28 20:47:15 From FishC Mobile | 显示全部楼层
傻纸 发表于 2019-8-28 18:45
我倒是建议你这样处理

python库实在太多了,不用换来换去的感觉,openpyxl能够读取的还是用openpyxl读, ...

您给的是一种方法,那么能否换种思路使用代码实现xls转成xlsx版本呢?表格不多时可以逐个打开另存为,但是还是觉得稍显繁琐
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-28 21:06:58 | 显示全部楼层    本楼为最佳答案   
  1. import os
  2. import os.path
  3. import win32com.client as win32

  4. ## 根目录
  5. rootdir = u'C:\\Users\\Desktop\\111'
  6. # 三个参数:父目录;所有文件夹名(不含路径);所有文件名
  7. for parent, dirnames, filenames in os.walk(rootdir):
  8.     for fn in filenames:
  9.         filedir = os.path.join(parent, fn)
  10.         print(filedir)

  11.         excel = win32.gencache.EnsureDispatch('Excel.Application')
  12.         wb = excel.Workbooks.Open(filedir)
  13.         # xlsx: FileFormat=51
  14.         # xls:  FileFormat=56
  15.         wb.SaveAs(filedir.replace('xls', 'xlsx'), FileFormat=51)
  16.         wb.Close()                                 
  17.         excel.Application.Quit()
复制代码

你可以试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-28 21:20:14 | 显示全部楼层
panheng 发表于 2019-8-28 20:47
您给的是一种方法,那么能否换种思路使用代码实现xls转成xlsx版本呢?表格不多时可以逐个打开另存为,但 ...

楼下应该可以 pywin32库
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-28 21:20:59 | 显示全部楼层
本帖最后由 panheng 于 2019-8-28 21:27 编辑


我在网上检索到了pywin32模块,使用中excel.Workbooks.Open 无法正确打开文件,不知道是不是文件命名中文的问题。


pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Excel', '抱歉,无法找到 panheng.xls。是否可能被移动、重命名或删除?', 'xlmain11.chm', 0, -2146827284), None)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-28 22:14:18 | 显示全部楼层
panheng 发表于 2019-8-28 21:20
我在网上检索到了pywin32模块,使用中excel.Workbooks.Open 无法正确打开文件,不知道是不是文件命名中 ...

路过。。lss的程序应该没错,那个不是中文的问题,excel.Workbooks.Open和wb.Close要使用绝对路径
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-28 22:53:35 | 显示全部楼层
傻纸 发表于 2019-8-28 22:14
路过。。lss的程序应该没错,那个不是中文的问题,excel.Workbooks.Open和wb.Close要使用绝对路径

是的。使用绝对路径解决了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 12:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表