如何使用pywin32保存Excel?

aemubtdh  于 2022-11-18  发布在  其他
关注(0)|答案(3)|浏览(275)

我正在尝试保存由另一个打开的应用程序生成的Excel文件。例如,Excel应用程序在前台。此文件包含一些数据,需要保存,例如,写入磁盘。
换句话说,我需要执行类似File-〉SaveAs的操作。
重现步骤:
1.打开Excel应用程序,默认标题显示为Book 1- Excel
1.编写此代码并运行

import win32com.client as win32

app = win32.gencache.EnsureDispatch('Excel.Application')
app.Workbooks(1).SaveAs(r"C:\Users\test\Desktop\test.xlsx")
app.Application.Quit()

错误-

Traceback (most recent call last):
  File "c:/Users/test/Downloads/automate_excel.py", line 6, in <module>
    ti = disp._oleobj_.GetTypeInfo()
pywintypes.com_error: (-2147418111, 'Call was rejected by callee.', None, None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:/Users/test/Downloads/automate_excel.py", line 6, in <module>
    app = win32.gencache.EnsureDispatch('Excel.Application')
  File "C:\Users\test\AppData\Local\Programs\Python\Python38\lib\site-packages\win32com\client\gencache.py", line 633, in EnsureDispatch
    raise TypeError(
TypeError: This COM object can not automate the makepy process - please run makepy manually for this object
mzillmmw

mzillmmw1#

您的问题可能有很多来源,所以如果您分享更多代码,我会很感激。第二个错误可能发生在您运行excel = win32.gencache.EnsureDispatch('Excel.Application')行的多个示例时,例如在一个for循环.中。此外,请确保有一个完全激活并获得.许可的Excel版本。

ajsxfq5m

ajsxfq5m2#

这对我来说是有效的(在python==3.9.8和pywin32==305上)。你会看到第一行和你的不一样,但我认为这就是它。
在此过程中,我们不断收到工作簿或设置DisplayAlerts的属性错误。我们发现(从这个问题:Excel.Application.Workbooks attribute error when converting excel to pdf),如果Excel处于循环状态(例如,编辑单元格或打开弹出窗口),则会出现错误。因此,请确保在单元格外单击Enter键,这样您就不会编辑它。

import win32com.client as win32
savepath = 'c:\\my\\file\\path\\test\\'

xl = win32.Dispatch('Excel.Application') 

wb = xl.Workbooks['Book1']
wb.DisplayAlerts = False # helpful if saving multiple times to save file, it means you won't get a pop-up for overwrite and will default to save it.
filename = 'new_xl.xlsx'
wb.SaveAs(savepath+filename)
wb.Close()
xl.Quit()

编辑:添加pywin32版本,包括更多提示

weylhg0b

weylhg0b3#

这是根据@scotscotmcc的答案为我工作的版本。问题出在我运行程序时处于编辑模式的单元格上。确保在当前单元格中按Enter键,然后退出excel的编辑模式。

import win32com.client as win32
import random
xl = win32.Dispatch('Excel.Application')
wb = xl.Workbooks['Book1']
wb.SaveAs(r"C:\Users\...\Desktop\Form"+str(random.randint(0,1000))+".xlsx")
wb.Close()
xl.Quit()

相关问题