文章目录
- 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文件。
目录
- 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格式