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
我开始将我的一些 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