Win32com:关闭特定 Excel 文件(如果已打开)
Win32com: Close a specific Excel file if it's opened
我只想检查是否打开了特定的 Excel 文件。如果是,我只想关闭 那个文件。
在下面的代码中,使用:
xl.Workbooks.Close()
关闭所有打开的 Excel 个文件。
使用:
xl.Workbooks.Close(FileName=xlPath)
导致
TypeError: Close() got an unexpected keyword argument 'FileName'.
完整代码:
import win32com.client as w3c
xl=w3c.gencache.EnsureDispatch("Excel.Application")
my_workbook = "test.xlsx"
xlPath='C:/Desktop/test.xlsx'
if xl.Workbooks.Count > 0:
if any(i.Name == my_workbook for i in xl.Workbooks):
xl.Workbooks.Close(FileName=xlPath)
xl.Workbooks.Close()
根据 Excel 对象库文档,Workbook.Close
是 Workbook
对象的一个方法。因此,在您的迭代中使用工作簿对象 i
(为清楚起见,在下面重命名为 wb
)。此外,您的 any()
表达式不会捕获 i-th 工作簿以关闭。所以 运行 名称检查里面 for-loop.
...
if xl.Workbooks.Count > 0:
for wb in xl.Workbooks:
if wb.Name == my_workbook:
wb.Close()
我只想检查是否打开了特定的 Excel 文件。如果是,我只想关闭 那个文件。
在下面的代码中,使用:
xl.Workbooks.Close()
关闭所有打开的 Excel 个文件。
使用:
xl.Workbooks.Close(FileName=xlPath)
导致
TypeError: Close() got an unexpected keyword argument 'FileName'.
完整代码:
import win32com.client as w3c
xl=w3c.gencache.EnsureDispatch("Excel.Application")
my_workbook = "test.xlsx"
xlPath='C:/Desktop/test.xlsx'
if xl.Workbooks.Count > 0:
if any(i.Name == my_workbook for i in xl.Workbooks):
xl.Workbooks.Close(FileName=xlPath)
xl.Workbooks.Close()
根据 Excel 对象库文档,Workbook.Close
是 Workbook
对象的一个方法。因此,在您的迭代中使用工作簿对象 i
(为清楚起见,在下面重命名为 wb
)。此外,您的 any()
表达式不会捕获 i-th 工作簿以关闭。所以 运行 名称检查里面 for-loop.
...
if xl.Workbooks.Count > 0:
for wb in xl.Workbooks:
if wb.Name == my_workbook:
wb.Close()