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)

浙江省
浏览 126
收藏
1
分享
1 +1
+1
全部评论