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