使用Python进行Excel文件xls/xlsx/xsv格式互相转换
作者:诸神缄默不语
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互转的资料请关注脚本之家其它相关文章!
