Pywin32直接使用像这样的列和行将在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。 这两种语言都在做一个COM接口的Excel对象库相同的事情。 由于Office应用程序随VBA一起提供,人们经常认为VBA 这些软件的语言,而且该语言本身是内置的,但VBA实际上是一个组件。 在IDE中的Tools / References下,你会看到VBA是第一个被选中的项目。

因此,使用Windows 组件对象模型(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运行你的代码try...except...finally块来捕获exception,并正确地取消初始化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