实现Excel文件xls与xlsx格式批量互相转换

76 篇文章 26 订阅
15 篇文章 2 订阅

python实现方法

将文件夹中的所有xls或xlsx文件转换为xlsx或xls文件

import win32com.client as win32  # 需安装pywin32
import os.path
import glob

excel = win32.gencache.EnsureDispatch('Excel.Application')

#简易使用方法
#filename = r'E:\xlsx\1.xls'
#wb = excel.Workbooks.Open(filename)
#wb.SaveAs(filename+'x', FileFormat=51)  #FileFormat=51 是 .xlsx 的扩展
#wb.Close()                              #FileFormat=56 是 .xls 的扩展
#excel.Application.Quit()

def xls2xlsx(xls_path, xlsx_path):
    # xls_path参数为待转换的xls文件所在文件夹
    # xlsx_path参数为转换完成的xlsx文件保存文件夹
    # 当xlsx保存文件夹存在同名原xls时,会弹窗提示是否替换,建议保存至空文件夹​

    path_list = glob.glob(xls_path + '\\*.xls')  # 获取文件夹下所有xls
    for file in path_list:
        filename = os.path.basename(file).replace('.xls', '.xlsx')  # 获取文件名
        wb = excel.Workbooks.Open(file)
        wb.SaveAs(xlsx_path + '\\' + filename, FileFormat=51)  # xlsx为51
        wb.Close()
    excel.Application.Quit()
    print('xls2xlsx转换完成')

def xlsx2xls(xlsx_path, xls_path):
    # xlsx_path参数为待转换的xlsx文件所在文件夹
    # xls_path参数为转换完成的xls文件保存文件夹
    # 当xls保存文件夹存在同名原xlsx时,会弹窗提示是否替换,建议保存至空文件夹​

    path_list = glob.glob(xlsx_path + '\\*.xlsx')  # 获取文件夹下所有xlsx
    for file in path_list:
        filename = os.path.basename(file).replace('.xlsx', '.xls')  # 获取文件名
        wb = excel.Workbooks.Open(file)
        wb.SaveAs(xls_path + '\\' + filename, FileFormat=56)  # xls为56
        wb.Close()
    excel.Application.Quit()
    print('xlsx2xls转换完成')


if __name__ == '__main__':
    xls_path = r'E:\xlsx\xls'
    xlsx_path = r'E:\xlsx\xlsx'
    xls2xlsx(xls_path, xlsx_path)
    #xlsx2xls(xlsx_path, xls_path)

VBA实现方法

将文件夹中的所有xls或xlsx文件转换为xlsx或xls文件;保存时如果存在同名文件,则会覆盖

Function xls2xlsx(xls_path$, save_path$)
    '将xls_path文件夹中所有xls文件转为xlsx格式,保存至save_path文件夹;注意同名覆盖
    Dim fso As Object, wb As Workbook, save_file$
    Application.ScreenUpdating = False  '关闭屏幕更新,加快程序运行
    Application.DisplayAlerts = False   '不显示警告信息
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(save_path) Then fso.CreateFolder (save_path)  '创建文件夹
    For Each f In fso.GetFolder(xls_path).Files  '遍历文件夹里文件
        If fso.GetExtensionName(f.Name) = "xls" Then
            save_file = save_path & "\" & f.Name & "x"  '保存文件全名(文件路径、文件名、扩展名)
            Set wb = Workbooks.Open(f)
            wb.SaveAs filename:=save_file, FileFormat:=xlOpenXMLWorkbook
            wb.Close (False)
        End If
    Next
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Function

Function xlsx2xls(xlsx_path$, save_path$)
    '将xlsx_path文件夹中所有xlsx文件转为xls格式,保存至save_path文件夹;注意同名覆盖
    Dim fso As Object, wb As Workbook, save_file$
    Application.ScreenUpdating = False  '关闭屏幕更新,加快程序运行
    Application.DisplayAlerts = False   '不显示警告信息
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FolderExists(save_path) Then fso.CreateFolder (save_path)  '创建文件夹
    For Each f In fso.GetFolder(xlsx_path).Files  '遍历文件夹里文件
        If fso.GetExtensionName(f.Name) = "xlsx" Then
            save_file = save_path & "\" & fso.GetBaseName(f.Name) & ".xls"  '保存文件全名(文件路径、文件名、扩展名)
            Set wb = Workbooks.Open(f)
            wb.SaveAs filename:=save_file, FileFormat:=xlExcel8
            wb.Close (False)
        End If
    Next
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Function

Private Sub xls和xlsx转换测试()
    Dim file_path$, save_path$
    file_path = "E:\测试\xls"
    save_path = "E:\测试\xlsx"
    a = xls2xlsx(file_path, save_path)  '2种调用方式
'    Call xlsx2xls(save_path, file_path)
End Sub
  • 10
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔_51

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值