python打不开xls文件,wps下用vba实现合并文件夹中所有excel文件

python打不开xls文件,用wps下vba解决问题

  • 用了常用的三种python读写xls文件的方法都报错
    • xlrd
    • openpyxl
    • pandas
    • 原因
    • 解决方法
      • 用vba实现合并文件夹中所有excel文件

用了常用的三种python读写xls文件的方法都报错

xlrd

代码

book = xlrd.open_workbook(filename)

报错

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'

openpyxl

代码

book = openpyxl.load_workbook(filename)

报错

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.

pandas

代码

book = pd.read_excel(filename)

报错

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'

原因

可能是由于要打开的xls文件不是标准的97-03版本

解决方法

用vba实现功能即可。例如:

用vba实现合并文件夹中所有excel文件

打开wps表格,在文件夹新建一个excel文件,点击“开发工具”,点击“VB编辑器”,右键“Project“,“插入”——>“模块”,编辑代码,点击“运行”。

Sub 合并当前目录下所有工作簿的全部工作表()
Dim MyPath, MyName, AWbName
Dim Wb As Workbook, WbN As String
Dim G As Long
Dim Num As Long
Dim BOX As String
Application.ScreenUpdating = False
MyPath = ActiveWorkbook.Path
MyName = Dir(MyPath & "\" & "*.xls")
AWbName = ActiveWorkbook.Name
Num = 0
Do While MyName <> ""
If MyName <> AWbName Then
Set Wb = Workbooks.Open(MyPath & "\" & MyName)
Num = Num + 1
With Workbooks(1).ActiveSheet
.Cells(.Range("B65536").End(xlUp).Row + 2, 1) = Left(MyName, Len(MyName) - 4)
For G = 1 To Sheets.Count
Wb.Sheets(G).UsedRange.Copy .Cells(.Range("B65536").End(xlUp).Row + 1, 1)
Next
WbN = WbN & Chr(13) & Wb.Name
Wb.Close False
End With
End If
MyName = Dir
Loop
Range("B1").Select
Application.ScreenUpdating = True
MsgBox "共合并了" & Num & "个工作薄下的全部工作表。如下:" & Chr(13) & WbN, vbInformation, "提示"
End Sub

你可能感兴趣的:(数据处理,python,excel,wps,vba,pandas)