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

作者:

文章目录
  • 准备环境和核心功能代码与项目3相同。
  • 准备环境和核心功能代码与项目3相同。
  • 准备环境和核心功能代码与项目3相同。
  • 准备环境和核心功能代码与项目3相同。
  • 准备环境和核心功能代码与项目3相同。
  • 目录
    • 1. Excel文件处理 – 将xls文件转换为xlsx
      • 准备环境
      • 复制即可运行的完整代码
      • 核心功能代码
    • 2. Excel文件处理 – 将xlsx文件转换为xls
      • 复制即可运行的完整代码
    • 3. Excel文件处理 – 将xls文件转换为csv
      • 复制即可运行的完整代码
    • 4. Excel文件处理 – 将xlsx文件转换为csv
      • 复制即可运行的完整代码
    • 5. Excel文件处理 – 将csv文件转换为xls
      • 复制即可运行的完整代码
    • 6. Excel文件处理 – 将csv文件转换为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_filesexample.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_filesexample.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文件。

    准备环境和核心功能代码与项目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_filesexample.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_filesexample.xlsx为您需要转换的xlsx文件路径即可。转换后的xls文件与xlsx文件同名(如果已经存在了同名xls文件,将加上(count)后缀以避免冲突)

    准备环境和核心功能代码与项目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_filesexample.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_filesexample.xls为您需要转换的xls文件路径即可。转换后的csv文件与xls文件同名(如果已经存在了同名csv文件,将加上(count)后缀以避免冲突)

    准备环境和核心功能代码与项目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_filesexample.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_filesexample.xlsx为您需要转换的xlsx文件路径即可。转换后的csv文件与xlsx文件同名(如果已经存在了同名csv文件,将加上(count)后缀以避免冲突)

    准备环境和核心功能代码与项目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_filesexample.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_filesexample.csv为您需要转换的csv文件路径即可。转换后的xls文件与csv文件同名(如果已经存在了同名xls文件,将加上(count)后缀以避免冲突)

    准备环境和核心功能代码与项目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_filesexample.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_filesexample.csv为您需要转换的csv文件路径即可。转换后的xlsx文件与csv文件同名(如果已经存在了同名xlsx文件,将加上(count)后缀以避免冲突)

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

    您可能感兴趣的文章:

    • Python 实现Excel XLS和XLSX格式相互转换问题
    • 使用Python设置Excel条件格式的完整指南
    • 利用Python实现Excel表格转换为HTML格式
    • 使用Python实现Excel文件转换为SVG格式

    站内搜索