使用Python进行Excel文件xls/xlsx/xsv格式互相转换

 更新时间:2025年11月26日 09:18:37   作者:诸神缄默不语  
本文介绍了如何使用Python进行Excel文件格式的互相转换,包括xls到xlsx、xlsx到xls、xls到csv、xlsx到csv、csv到xls以及csv到xlsx的转换方法,转换过程中需要注意文件路径的修改以及文件名冲突的处理,需要的朋友可以参考下

1. Excel文件处理 - 将xls文件转换为xlsx

准备环境

Python版本需要为3.8-3.14(pywin32的要求)
通过pip下载pywin32:

pip install pywin32

复制即可运行的完整代码

import os
from win32com import client as wc

def convert_xls_to_xlsx(xls_path: str) -> str:
    """
    将单个xls文件转换为xlsx格式,并返回转换后的文件路径
    
    Args:
        xls_path (str): xls文件路径
        
    Returns:
        str: 转换后的xlsx文件路径
        
    Raises:
        FileNotFoundError: 如果文件不存在
        ValueError: 如果文件不是xls格式或路径无效
        Exception: 转换过程中的其他错误
    """
    # 参数验证
    if not xls_path or not isinstance(xls_path, str):
        raise ValueError("文件路径不能为空且必须是字符串")
    
    # 检查文件是否存在
    if not os.path.exists(xls_path):
        raise FileNotFoundError(f"文件不存在: {xls_path}")
    
    # 检查文件扩展名
    if not xls_path.lower().endswith('.xls'):
        raise ValueError(f"文件不是xls格式: {xls_path}")
    
    # 检查文件是否被占用(临时文件)
    if os.path.basename(xls_path).startswith('~'):
        raise ValueError(f"文件可能是临时文件: {xls_path}")
    
    # 检查文件大小(避免处理空文件或损坏文件)
    file_size = os.path.getsize(xls_path)
    if file_size == 0:
        raise ValueError(f"文件为空: {xls_path}")
    
    excel = None
    workbook = None
    
    try:
        # 创建Excel应用实例
        excel = wc.Dispatch("Excel.Application")
        excel.Visible = False
        excel.DisplayAlerts = False  # 不显示警告对话框
        
        # 打开工作簿
        workbook = excel.Workbooks.Open(xls_path)
        
        # 生成新的xlsx文件路径
        base_path = os.path.splitext(xls_path)[0]
        new_path = base_path + ".xlsx"
        
        # 处理文件名冲突
        count = 0
        while os.path.exists(new_path):
            count += 1
            new_path = f"{base_path}({count}).xlsx"
        
        # 保存为xlsx格式(51代表xlsx格式)
        workbook.SaveAs(new_path, 51)
        
        # 验证转换后的文件
        if not os.path.exists(new_path):
            raise Exception("转换后的文件未创建成功")
        
        # 检查转换后的文件大小
        if os.path.getsize(new_path) == 0:
            raise Exception("转换后的文件为空")
        
        return new_path
        
    except Exception as e:
        # 清理可能创建的部分文件
        if 'new_path' in locals() and os.path.exists(new_path):
            try:
                os.remove(new_path)
            except:
                pass
        raise e
        
    finally:
        # 确保资源被正确释放
        try:
            if workbook:
                workbook.Close()
        except:
            pass
            
        try:
            if excel:
                excel.Quit()
        except:
            pass


def main():
    """主函数:转换单个文件并显示结果"""
    # 直接在代码中设置要转换的文件路径
    xls_file_path = r"D:\excel_files\example.xls"  # 修改为您要转换的xls文件路径
    
    try:
        print(f"开始转换文件: {xls_file_path}")
        
        # 转换文件
        xlsx_path = convert_xls_to_xlsx(xls_file_path)
        
        # 输出成功信息
        print("\n" + "="*50)
        print("✓ 文件转换成功!")
        print(f"原始文件: {xls_file_path}")
        print(f"转换后文件: {xlsx_path}")
        print(f"文件大小: {os.path.getsize(xlsx_path)} 字节")
        print("="*50)
        
    except FileNotFoundError as e:
        print(f"✗ 错误: {e}")
        print("请检查文件路径是否正确")
    except ValueError as e:
        print(f"✗ 错误: {e}")
        print("请确保文件是有效的xls文档")
    except Exception as e:
        print(f"✗ 转换失败: {e}")
        print("可能是Excel应用问题或文件损坏")


if __name__ == "__main__":
    main()

将代码复制到你的Python编辑器中,并修改D:\excel_files\example.xls为您需要转换的xls文件路径即可。转换后的xlsx文件与xls文件同名(如果已经存在了同名xlsx文件,将加上(count)后缀以避免冲突)

核心功能代码

xls文件转换为xlsx文件的核心功能代码为:

import os
from win32com import client as wc

excel = wc.Dispatch("Excel.Application")
excel.Visible = False
excel.DisplayAlerts = False

workbook = excel.Workbooks.Open(xls_path)
workbook.SaveAs(new_path, 51)
workbook.Close()

excel.Quit()

将xls_path对应的Excel工作簿转换为new_path对应的Excel工作簿。需要注意的是这个代码本身xls_path可以是xls/xlsx类型的Excel文件路径,Python代码本身只是起到了读取Excel文件的作用。

workbook.SaveAs(file_name, file_format)中file_format这个参数表示另存为文件的格式。

  • 51: xlOpenXMLWorkbook - 不含宏的xlsx格式
  • 52: xlOpenXMLWorkbookMacroEnabled - 含宏的xlsm格式
  • 56: xlExcel8 - Excel 97-2003的xls格式
  • 6: xlCSV - CSV格式
  • 62: xlCSVUTF8 - UTF-8编码的CSV格式
  • 22: xlTextMSDOS - MS-DOS文本格式
  • 42: xlUnicodeText - Unicode文本格式

如果原xls文件包含宏,需要使用52格式保存为xlsm文件。

2. Excel文件处理 - 将xlsx文件转换为xls

准备环境和核心功能代码与项目3相同。

复制即可运行的完整代码

import os
from win32com import client as wc

def convert_xlsx_to_xls(xlsx_path: str) -> str:
    """
    将单个xlsx文件转换为xls格式
    
    Args:
        xlsx_path (str): xlsx文件路径
        
    Returns:
        str: 转换后的xls文件路径
    """
    if not os.path.exists(xlsx_path):
        raise FileNotFoundError(f"文件不存在: {xlsx_path}")
    
    if not xlsx_path.lower().endswith('.xlsx'):
        raise ValueError(f"文件不是xlsx格式: {xlsx_path}")
    
    excel = None
    workbook = None
    
    try:
        excel = wc.Dispatch("Excel.Application")
        excel.Visible = False
        excel.DisplayAlerts = False
        
        workbook = excel.Workbooks.Open(xlsx_path)
        
        base_path = os.path.splitext(xlsx_path)[0]
        new_path = base_path + ".xls"
        
        count = 0
        while os.path.exists(new_path):
            count += 1
            new_path = f"{base_path}({count}).xls"
        
        # 56: xlExcel8 (Excel 97-2003格式)
        workbook.SaveAs(new_path, 56)
        
        return new_path
        
    finally:
        if workbook:
            workbook.Close()
        if excel:
            excel.Quit()

def main():
    xlsx_file_path = r"D:\excel_files\example.xlsx"  # 修改为您的xlsx文件路径
    
    try:
        print(f"开始转换文件: {xlsx_file_path}")
        xls_path = convert_xlsx_to_xls(xlsx_file_path)
        print(f"✓ 转换成功: {xls_path}")
    except Exception as e:
        print(f"✗ 转换失败: {e}")

if __name__ == "__main__":
    main()

将代码复制到你的Python编辑器中,并修改D:\excel_files\example.xlsx为您需要转换的xlsx文件路径即可。转换后的xls文件与xlsx文件同名(如果已经存在了同名xls文件,将加上(count)后缀以避免冲突)

3. Excel文件处理 - 将xls文件转换为csv

准备环境和核心功能代码与项目3相同。

复制即可运行的完整代码

import os
from win32com import client as wc

def convert_xls_to_csv(xls_path: str) -> str:
    """
    将单个xls文件转换为csv格式
    
    Args:
        xls_path (str): xls文件路径
        
    Returns:
        str: 转换后的csv文件路径
    """
    if not os.path.exists(xls_path):
        raise FileNotFoundError(f"文件不存在: {xls_path}")
    
    if not xls_path.lower().endswith('.xls'):
        raise ValueError(f"文件不是xls格式: {xls_path}")
    
    excel = None
    workbook = None
    
    try:
        excel = wc.Dispatch("Excel.Application")
        excel.Visible = False
        excel.DisplayAlerts = False
        
        workbook = excel.Workbooks.Open(xls_path)
        
        base_path = os.path.splitext(xls_path)[0]
        new_path = base_path + ".csv"
        
        count = 0
        while os.path.exists(new_path):
            count += 1
            new_path = f"{base_path}({count}).csv"
        
        # 6: xlCSV (CSV格式)
        workbook.SaveAs(new_path, 6)
        
        return new_path
        
    finally:
        if workbook:
            workbook.Close()
        if excel:
            excel.Quit()

def main():
    xls_file_path = r"D:\excel_files\example.xls"  # 修改为您的xls文件路径
    
    try:
        print(f"开始转换文件: {xls_file_path}")
        csv_path = convert_xls_to_csv(xls_file_path)
        print(f"✓ 转换成功: {csv_path}")
    except Exception as e:
        print(f"✗ 转换失败: {e}")

if __name__ == "__main__":
    main()

将代码复制到你的Python编辑器中,并修改D:\excel_files\example.xls为您需要转换的xls文件路径即可。转换后的csv文件与xls文件同名(如果已经存在了同名csv文件,将加上(count)后缀以避免冲突)

4. Excel文件处理 - 将xlsx文件转换为csv

准备环境和核心功能代码与项目3相同。

复制即可运行的完整代码

import os
from win32com import client as wc

def convert_xlsx_to_csv(xlsx_path: str) -> str:
    """
    将单个xlsx文件转换为csv格式
    
    Args:
        xlsx_path (str): xlsx文件路径
        
    Returns:
        str: 转换后的csv文件路径
    """
    if not os.path.exists(xlsx_path):
        raise FileNotFoundError(f"文件不存在: {xlsx_path}")
    
    if not xlsx_path.lower().endswith('.xlsx'):
        raise ValueError(f"文件不是xlsx格式: {xlsx_path}")
    
    excel = None
    workbook = None
    
    try:
        excel = wc.Dispatch("Excel.Application")
        excel.Visible = False
        excel.DisplayAlerts = False
        
        workbook = excel.Workbooks.Open(xlsx_path)
        
        base_path = os.path.splitext(xlsx_path)[0]
        new_path = base_path + ".csv"
        
        count = 0
        while os.path.exists(new_path):
            count += 1
            new_path = f"{base_path}({count}).csv"
        
        # 6: xlCSV (CSV格式)
        workbook.SaveAs(new_path, 6)
        
        return new_path
        
    finally:
        if workbook:
            workbook.Close()
        if excel:
            excel.Quit()

def main():
    xlsx_file_path = r"D:\excel_files\example.xlsx"  # 修改为您的xlsx文件路径
    
    try:
        print(f"开始转换文件: {xlsx_file_path}")
        csv_path = convert_xlsx_to_csv(xlsx_file_path)
        print(f"✓ 转换成功: {csv_path}")
    except Exception as e:
        print(f"✗ 转换失败: {e}")

if __name__ == "__main__":
    main()

将代码复制到你的Python编辑器中,并修改D:\excel_files\example.xlsx为您需要转换的xlsx文件路径即可。转换后的csv文件与xlsx文件同名(如果已经存在了同名csv文件,将加上(count)后缀以避免冲突)

5. Excel文件处理 - 将csv文件转换为xls

准备环境和核心功能代码与项目3相同。

复制即可运行的完整代码

import os
from win32com import client as wc

def convert_csv_to_xls(csv_path: str) -> str:
    """
    将单个csv文件转换为xls格式
    
    Args:
        csv_path (str): csv文件路径
        
    Returns:
        str: 转换后的xls文件路径
    """
    if not os.path.exists(csv_path):
        raise FileNotFoundError(f"文件不存在: {csv_path}")
    
    if not csv_path.lower().endswith('.csv'):
        raise ValueError(f"文件不是csv格式: {csv_path}")
    
    excel = None
    workbook = None
    
    try:
        excel = wc.Dispatch("Excel.Application")
        excel.Visible = False
        excel.DisplayAlerts = False
        
        workbook = excel.Workbooks.Open(csv_path)
        
        base_path = os.path.splitext(csv_path)[0]
        new_path = base_path + ".xls"
        
        count = 0
        while os.path.exists(new_path):
            count += 1
            new_path = f"{base_path}({count}).xls"
        
        # 56: xlExcel8 (Excel 97-2003格式)
        workbook.SaveAs(new_path, 56)
        
        return new_path
        
    finally:
        if workbook:
            workbook.Close()
        if excel:
            excel.Quit()

def main():
    csv_file_path = r"D:\excel_files\example.csv"  # 修改为您的csv文件路径
    
    try:
        print(f"开始转换文件: {csv_file_path}")
        xls_path = convert_csv_to_xls(csv_file_path)
        print(f"✓ 转换成功: {xls_path}")
    except Exception as e:
        print(f"✗ 转换失败: {e}")

if __name__ == "__main__":
    main()

将代码复制到你的Python编辑器中,并修改D:\excel_files\example.csv为您需要转换的csv文件路径即可。转换后的xls文件与csv文件同名(如果已经存在了同名xls文件,将加上(count)后缀以避免冲突)

6. Excel文件处理 - 将csv文件转换为xlsx

准备环境和核心功能代码与项目3相同。

复制即可运行的完整代码

import os
from win32com import client as wc

def convert_csv_to_xlsx(csv_path: str) -> str:
    """
    将单个csv文件转换为xlsx格式
    
    Args:
        csv_path (str): csv文件路径
        
    Returns:
        str: 转换后的xlsx文件路径
    """
    if not os.path.exists(csv_path):
        raise FileNotFoundError(f"文件不存在: {csv_path}")
    
    if not csv_path.lower().endswith('.csv'):
        raise ValueError(f"文件不是csv格式: {csv_path}")
    
    excel = None
    workbook = None
    
    try:
        excel = wc.Dispatch("Excel.Application")
        excel.Visible = False
        excel.DisplayAlerts = False
        
        workbook = excel.Workbooks.Open(csv_path)
        
        base_path = os.path.splitext(csv_path)[0]
        new_path = base_path + ".xlsx"
        
        count = 0
        while os.path.exists(new_path):
            count += 1
            new_path = f"{base_path}({count}).xlsx"
        
        # 51: xlOpenXMLWorkbook (不含宏的xlsx)
        workbook.SaveAs(new_path, 51)
        
        return new_path
        
    finally:
        if workbook:
            workbook.Close()
        if excel:
            excel.Quit()

def main():
    csv_file_path = r"D:\excel_files\example.csv"  # 修改为您的csv文件路径
    
    try:
        print(f"开始转换文件: {csv_file_path}")
        xlsx_path = convert_csv_to_xlsx(csv_file_path)
        print(f"✓ 转换成功: {xlsx_path}")
    except Exception as e:
        print(f"✗ 转换失败: {e}")

if __name__ == "__main__":
    main()

将代码复制到你的Python编辑器中,并修改D:\excel_files\example.csv为您需要转换的csv文件路径即可。转换后的xlsx文件与csv文件同名(如果已经存在了同名xlsx文件,将加上(count)后缀以避免冲突)

以上就是使用Python进行Excel文件xls/xlsx/xsv格式互相转换的详细内容,更多关于Python文件格式xls/xlsx/xsv互转的资料请关注脚本之家其它相关文章!

相关文章

  • Python字典 dict几种遍历方式

    Python字典 dict几种遍历方式

    这篇文章主要给大家分享的是Python字典 dict几种遍历方式,文章主要介绍使用 for key in dict遍历字典、使用for key in dict.keys () 遍历字典的键等内容,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • python实现的AES双向对称加密解密与用法分析

    python实现的AES双向对称加密解密与用法分析

    这篇文章主要介绍了python实现的AES双向对称加密解密与用法,简单分析了AES加密解密算法的基本概念并结合实例形式给出了AES加密解密算法的相关实现技巧与使用注意事项,需要的朋友可以参考下
    2017-05-05
  • python列表的常用操作方法小结

    python列表的常用操作方法小结

    这篇文章主要为大家详细介绍了python字典的常用操作方法,主要内容包含Python中列表(List)的详解操作方法,包含创建、访问、更新、删除、其它操作等,需要的朋友可以参考下
    2016-05-05
  • Python利用Spire.Presentation for Python实现将PPT(X) 转换为PDF

    Python利用Spire.Presentation for Python实现将PPT(X) 转换为PDF

    在日常办公和自动化场景中,PowerPoint (PPT/PPTX) 文件因其丰富的表现力而广泛应用于演示和汇报本文将为您详细介绍如何使用 Spire.Presentation for Python 轻松实现 PPT 到 PDF 的自动化转换,需要的可以了解下
    2025-10-10
  • 解决Keras 中加入lambda层无法正常载入模型问题

    解决Keras 中加入lambda层无法正常载入模型问题

    这篇文章主要介绍了解决Keras 中加入lambda层无法正常载入模型问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python工程实践之np.loadtxt()读取数据

    Python工程实践之np.loadtxt()读取数据

    为了方便使用和记忆,有时候我们会把numpy.loadtxt()缩写成np.loadtxt(),这篇文章主要给大家介绍了关于Python工程实践之np.loadtxt()读取数据的相关资料,需要的朋友可以参考下
    2023-07-07
  • Python调用C/C++函数库的多种方法与实践指南

    Python调用C/C++函数库的多种方法与实践指南

    Python作为一门高级编程语言,以其简洁的语法和丰富的库生态赢得了开发者的青睐,然而,在计算密集型任务中,Python的性能往往无法满足要求,Python调用C/C++函数库成为提升应用性能的关键技术路径,本文将深入探讨Python调用C/C++函数库的多种方法,需要的朋友可以参考下
    2025-08-08
  • Python  处理 Pandas DataFrame 中的行和列

    Python  处理 Pandas DataFrame 中的行和列

    这篇文章主要介绍了Python处理Pandas DataFrame中的行和列,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法

    Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法

    这篇文章主要介绍了Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法,涉及Python操作matplotlib模块绘图的相关技巧,需要的朋友可以参考下
    2015-05-05
  • numpy系列之数组合并(横向和纵向)

    numpy系列之数组合并(横向和纵向)

    本文主要介绍了numpy系列之数组合并(横向和纵向),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论