Pywin32 直接使用列和行,就像在 VBA 中完成的那样

Pywin32 Working directly with Columns and Rows like it would be done in VBA

我开始将我的一些 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 来处理行和列,而不仅仅是范围?

简单地运行:sh.Columns("A:D").Clear。应该注意的是,您并不是将 VBA 代码翻译成 Python。两种语言在为 Excel 对象库创建 COM 接口时做同样的事情。由于 Office 应用程序附带 VBA,因此通常认为 VBA 这些软件的语言,并且该语言是本机内置的,但 VBA 实际上是一个组件。在 IDE 中的 Tools/References 下,您会看到 VBA 是第一个选中的项目。

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

Python (win32com模块)

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

PHP (COM class)

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

R(RDCOMClient模块)

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

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

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