com接口开发,无法另存为其他文件
import pathlib
import time
def xlsx_to_xlsb(input_path, output_path=None, excel_mode='Ket'):
"""
将 xlsx 文件另存为 xlsb 格式
"""
obj_input_path = pathlib.Path(input_path)
if not obj_input_path.exists():
return [False, '转换失败,源文件不存在!' + str(input_path)]
# 如果没有指定输出路径,默认在源文件同目录下生成同名 xlsb
if output_path is None:
output_path = obj_input_path.with_suffix('.xlsb')
import pythoncom
import win32com.client
import os
# 稍微等待一下,确保系统资源就绪
time.sleep(2)
app = None
wb = None
pythoncom.CoInitialize()
error = ''
# 1. 尝试关闭可能占用文件的进程
# self.close_wps_compel()
# self.close_excel_compel()
# 2. 确定 COM 对象名称
if excel_mode == '微软' or excel_mode == 'Excel':
excel_mode = 'Excel'
else:
# 如果是 WPS,通常也是 'Ket' 或者 'Kwps'
excel_mode = 'Ket'
# 3. 启动应用
app = win32com.client.Dispatch(f"{excel_mode}.Application")
app.Visible = False
app.DisplayAlerts = False
# 4. 打开工作簿
# 使用绝对路径以防万一
abs_input_path = os.path.abspath(input_path)
wb = app.Workbooks.Open(abs_input_path)
# 5. 另存为 xlsb
abs_output_path = os.path.abspath(output_path)
wb.SaveAs(Filename=abs_output_path, FileFormat=50)
# 6. 关闭工作簿
wb.Close(SaveChanges=False)
# 确保资源释放
if 'wb' in locals() and wb is not None:
try:
wb.Close(SaveChanges=False)
except:
pass
if 'app' in locals() and app is not None:
try:
app.Quit()
except:
pass
pythoncom.CoUninitialize()
if len(error) > 0:
return [False, error]
return [True, "转换成功! 路径: " + str(output_path)]
result = xlsx_to_xlsb(r'C:\Users\xxxx\Desktop\匹配.xlsx')
print(result)
运行这个函数会直接报错:pywintypes.com_error: (-2147352573, '找不到成员。', None, None)