通过read_excel打开xls文件时,报错"struct.error: unpack requires a bytes object of length 2"

Excel格式转换摘抄自 阿丙的博客园 链接请点击

1.问题描述

文件夹内存在大量的xls文件,用pandas的read_excel 读取的时候,报错: “struct.error: unpack requires a bytes object of length 2”,尝试通过 read_excel(open(file,‘rb’,encoding=“gbk”)) 换了多种编码格式无果。

open(path) 得到如下输出:
<_io.TextIOWrapper name=‘F://数据//ceshi.xls’ mode=‘r’ encoding=‘cp936’>

2.问题解决

通过以下链接得知问题源于旧有的excel版本文件,可将文件格式替换为xlsx格式即可,亲测成功http://www.itkeyword.com/doc/289515404364052x169/python-pandas-cannot-read-old-excel-files-with-some-strange-encoding-and-split-p

不过文件众多,批量改名并不能达到修改文件格式的目的,通过VB可以实现。

具体实现如下:

执行条件:

  1. Office2007及以上版本的Excel
  2. Excel启用宏

工具下载:
  可以自己新建Excel
功能介绍:
  后面有相应的代码
  《xls2xlsx.xlsm》会在所在文件夹目录中、包括子目录中,遍历所有.xls格式的文件,执行“另存为”操作,然后在原文件当前位置另存为一个同名的.xlsx格式的文件。
  比如:执行前xls2xlsx.xlsm所在的文件夹中有3个.xls格式的文件,同时包含一个子文件夹,子文件夹中也有3个.xls格式的文件
  
  《Convert2xlsx.xlsm》会在所在文件夹目录中(不包括子目录),遍历所有.xls格式的文件,执行“另存为”操作,然后在当前路径下生成一个文件夹xlsx,这个文件夹中放了所有新生成的文件。
  比如:执行前Convert2xlsx.xlsm所在的文件夹中有3个.xls格式的文件

执行方法:
  1、新建一个Excel;
  2、启用宏操作
  一般情况下,打开Excel的时候,会弹出如下警告,如果弹出了这个警告,直接启用就可以了;如果没有出现的话,请参考以下百度经验启用宏http://jingyan.baidu.com/article/39810a23e39b9db637fda651.html
  3、编写执行VBA代码
  这一步新手肯定是不会的,详细地图文介绍就参考百度经验http://jingyan.baidu.com/article/09ea3ede265e8bc0aede39ba.html,我这里只作简单的说明:
  (a)在工作表界面按下组合快捷键Alt+F11或者右键单击任意一个工作表标签,在弹出的右键快捷菜单单击“查看代码”进入VBA编辑环境
  (b)如果是下载的我的工具,可以跳过此步骤;如果是新建的Excel,此时在VBA编辑环境中的“代码窗口”复制粘贴以下两个代码中的一个:

《xls2xlsx.xlsm》

Dim iFile(1 To 100000) As String
Dim count As IntegerSub xls2xlsx()iPath = ThisWorkbook.PathOn Error Resume Nextcount = 0zdir iPathFor i = 1 To countIf iFile(i) Like "*.xls" And iFile(i) <> ThisWorkbook.FullName ThenMyFile = iFile(i)FilePath = Replace(MyFile, ".xls", ".xlsx")If Dir(FilePath, 16) = Empty ThenSet WBookOther = Workbooks.Open(MyFile)Application.ScreenUpdating = FalseActiveWorkbook.SaveAs Filename:=FilePath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=FalseWBookOther.Close SaveChanges:=False      '解决不能close 文件问题Application.ScreenUpdating = TrueEnd IfEnd IfNext
End SubSub zdir(p)       '访问当前文件夹下所有子文件夹及文件Set fs = CreateObject("scripting.filesystemobject")For Each f In fs.GetFolder(p).FilesIf f <> ThisWorkbook.FullName Then count = count + 1: iFile(count) = fNextFor Each m In fs.GetFolder(p).SubFolderszdir mNext
End Sub

《Convert2xlsx.xlsm》

Sub xls2xlsx()
Dim FilePath, MyFile, iPath, Name, OutPath As String
iPath = ThisWorkbook.Path
OutPath = Dir(iPath & "\xlsx", vbDirectory)
If OutPath = "" ThenMkDir (iPath & "\xlsx")
End If
MyFile = Dir(iPath & "\*.xls")If MyFile <> "" Then
DoOn Error Resume NextIf MyFile = ThisWorkbook.Name Then MyFile = DirWorkbooks.Open (iPath & "\" & MyFile)MyFile = Replace(MyFile, ".xls", ".xlsx")Name = "\" & MyFileFilePath = iPath & "\xlsx" & NameApplication.ScreenUpdating = FalseActiveWorkbook.SaveAs Filename:=FilePath, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=FalseWorkbooks(MyFile).Close TrueApplication.ScreenUpdating = TrueMyFile = Dir
Loop While MyFile <> ""
End If
End Sub

©按下F5快捷键执行这段代码或者在菜单中单击“运行子过程/用户窗体”命令

PS:需要说明的是,在执行过程中,不要去做其他的事情,不然可能会中断程序的运行

过程中可能遇到的问题

  1. 宏功能启用:链接

  2. excel点击 vb,内存溢出
    将VBA6里的VBE6EXT.OLB复制到VBA7,VBA7里的VBE7.DLL复制到VBA6,再次打开office就不会出现了

    VBE7.DLL所在目录:C:\Program Files\Common Files\microsoft shared\VBA\VBA7(可能会有差异,如果是VBA7.1,则是7.1)
    VBE6EXT.OLB所在目录: C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA6,复制过来粘贴即可

通过read_excel打开xls文件时,报错struct.error: unpack requires a bytes object of length 2相关推荐

  1. python 网络编程 struct解包时报错 struct.error: unpack requires a buffer of 4 bytes

    报错信息 D:\Donta_tensorflow-yolov3\python\python.exe D:/10_gitee/network_programming/避障程序信号及图像接收端/20100 ...

  2. python 打开csv文件,报错'utf-8' codec can't decode bytes in position 16: invalid continuation byte

    问题: with open(1.csv, 'r', encoding='utf-8'):ori_lines = f.readlines()...... 运行报错: 'utf-8' codec can' ...

  3. 使用cmd打开java文件,报错:“错误,编码GBK的不可映射字符”

    使用cmd打开java文件,报错:"错误,编码GBK的不可映射字符" 今天使用EditPlus写了一个小程序,用cmd运行时报错--"错误,编码GBK的不可映射字符&qu ...

  4. windos找不到文件:打开fla文件时候报错!

    朋友们:   这个问题见过吗? 打开fla文件时候报错! 解决方案:文件---打开--指定就行了...

  5. linux执行.sh文件时,报错:XXX.sh: Permission denied(没有权限)

    linux执行.sh文件时,报错:XXX.sh: Permission denied(没有权限) 解决方法:修改对该文件的权限 例如报错: bash: ./zkServer.sh: Permissio ...

  6. 解决在eclipse中打开.yml文件老是报错的问题(粗暴有效)

    在eclipse中打开.yml文件老是报错 我在eclipse是装过eclipse的springboot插件的,可以支持yml文件, 但是有一点不舒服的地方在于,每次打开yml文件的时候编辑器就会报错 ...

  7. vue中通过arr.length获取数组长度报错:Error in render: “TypeError: Cannot read property ‘length‘ of undefined“

    刚开始是通过arr.length获取数组长度的! 结果控制台报错: Error in render: "TypeError: Cannot read property 'length' of ...

  8. IDEA打开html文件时显示错误browser error提示找不到chrome或者别的浏览器

    打开settings 搜索browser出现Web Browsers and Preview 找到提示报错的浏览器,我这是chrome谷歌浏览器. crtl+alt+delete打开任务管理器 打开你 ...

  9. 安装wps导致 application/kset 上传文件类型报错解决办法

    电脑中安装wps上传execl时,上传.xls文件时 报错 application/kset 文件类型不正确 打印array() print_r($_FILES ) 结果如下: Array ( [us ...

  10. python xlrd读取文件报错_python利用xlrd读取excel文件始终报错原因

    1.代码按照网上百度的格式进行书写如下: 但运行后,始终报错如下: 百度了xlrd网页: 分明支持xls和xlsx两种格式的文件,但运行始终报错. 最后找到原因是因为我所读取的文件虽然是以.xls命名 ...

最新文章

  1. linux wps 中文输入法_linux_从windows到ubuntu再到manjaro
  2. 程序最小化后释放了很多的内存的原因
  3. 入行Python需要看的4本书推荐
  4. Android代码片段:设备信息
  5. maven环境下使用java、scala混合开发spark应用
  6. asp文件上传和下载
  7. WeihanLi.Npoi 1.7.0 更新介绍
  8. 搭建java_搭建JAVA环境
  9. HDU-6341 Problem J. Let Sudoku Rotate(dfs 剪枝)
  10. 素数就是不能再进行等分的数。比如2,3,5,7,11,等 9=3*3说明它可以等分,因而不是素数 我们国家在1949年建国,如果只给你 1 9 4 9 这4个数字卡片, 可以随意摆放他们的先后顺序(但
  11. Monte Carlo采样
  12. SQLite判断表是否存在
  13. 计算机子网掩码在线,子网掩码计算器
  14. 开源虚拟机工具_使用开源工具与虚拟乐高玩
  15. 如何批量删除电脑上的空文件夹?
  16. 在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数
  17. 液化气瓶爆炸总发生,要为监管敲警钟
  18. MATLAB Robotics System Toolbox学习笔记(一):一步一步建造一个机械臂
  19. 数据分析实战平台分享
  20. mysql mysqldataadapter_MySQL的DataAdapter用法

热门文章

  1. 港股上市公司公告 API 数据接口
  2. 全国省市自治区经纬度坐标
  3. 保研后,你们都怎么样了?
  4. 未来的计算机 展望未来作文,展望未来作文素材_2020展望未来作文精选5篇
  5. MD5,SHA1,SHA256,NTLM,LM等Hash在线破解网站收集
  6. 关于antd中嵌套表格expandable属性如何设置为可变化的
  7. 在进行github相关操作的时候一直被要求Enter passphrase for key. 如何避免每次操作都重新填写一遍passphrase?
  8. 霍夫丁不等式、马尔科夫不等式证明
  9. C#控制台实现计算器功能
  10. openstack RPM打包