Pywin32直接使用列和行,就像在VBA

时间:2016-10-16 10:41:37

标签: python excel win32com

我开始将我的一些VBA代码迁移到Python中,因为它为我提供了更多资源。但是我以类似的方式工作有麻烦。

我想清除一些列,但是我无法直接使用工作表的属性列。我必须做这样的转变(完整代码):

import win32com.client as win32

xl = win32.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True

wb = xl.Workbooks.Open(r'Test.xlsx')
sh = wb.ActiveSheet

xl.ScreenUpdating = True
last_col = sh.UsedRange.Columns.Count
last_row = sh.UsedRange.Rows.Count
my_range = sh.Range(sh.Cells(1, 1), sh.Cells(last_row, 4))
my_range.Select()
xl.Selection.ClearContents()

所以,我想做的,就像在VBA中一样:

Columns("A:D").Clear

有没有办法使用Python处理行和列,而不仅仅是范围?

1 个答案:

答案 0 :(得分:1)

只需运行:sh.Columns("A:D").Clear。应该注意的是,您没有将VBA代码转换为Python。两种语言在创建Excel对象库的COM接口时都做了同样的事情。由于Office应用程序附带VBA,因此通常认为VBA 这些软件的语言,并且语言本身是内置的,但VBA实际上是一个组件。在IDE中的工具/引用下,您将看到VBA是第一个检查项。

因此,使用Windows Component Object Model (COM),任何通用语言(包括Python,PHP,R,Java,C#等)都可以连接到Excel对象库并调用工作簿对象和方法。您只需遵守语言的语法即可。例如:

Python (win32com模块)

sh.Columns("A:D").Clear()

PHP COM类)

sh->Columns("A:D")->Clear()

R RDCOMClient模块)

sh$Columns("A:D")$Clear()

此外,考虑在try...except...finally块中运行代码以捕获异常并正确地取消初始化COM对象,无论代码是否出错。否则,Excel.exe进程将继续在后台运行。

import win32com.client as win32

try:
    xl = win32.gencache.EnsureDispatch('Excel.Application')
    xl.Visible = True

    wb = xl.Workbooks.Open(r'C:\Path\To\Test.xlsx')
    sh = wb.ActiveSheet

    xl.ScreenUpdating = True
    sh.Columns("A:D").Clear()

except Exception as e:
    print(e)

finally:
    sh = None
    wb = None
    xl = None