Python Win32com.Client 模块中用于 Select-Case (excel) 的语法是什么?



所以我正在尝试有效地删除 excel 电子表格中满足特定条件的行。但是,我认为如果我可以使用一些内置的 VBA 功能来选择要删除的所有行,然后一次将它们全部删除,可能会更快。

以下链接是我想使用 python win32com.client 模块执行的操作的 VBA 等效项: https://stackoverflow.com/a/31390697/9453718

我目前只是循环访问并删除行。我在 excel 中浏览了所有行,如果它满足某些条件,我称之为:Sheet.Rows(r)。EntireRow.Delete()

有什么建议吗?

编辑:这是我目前拥有的示例,可以逐一删除每一行

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
book = excel.Workbooks.Open("ExcelWith200000Lines.xlsm")
sheet = book.Worksheets(0) #gets first sheet
nrows = sheet.UsedRange.Row + sheet.UsedRange.Rows.Count-1 # number of rows
ncols = sheet.UsedRange.Column + sheet.UsedRange.Columns.Count-1 # num of cols
data = sheet.Range('A1:'+NumToLetter(ncols) + str(nrows)).Value #loads all the data on the sheet into the python script
RELEVANT_COL_INDEX=0
for r in range(nrows-1, -1, -1): #starts at last row and goes to first row
if data[r][RELEVANT_COL_INDEX] == "delete_me":
sheet.Rows(r+1).EntireRow.Delete() #deletes the row here
book.SaveAs("myOutput.xlsm")

SELECT CASE语句不是 Excel 对象库的一部分,而是 VBA 语言的一部分。当您使用win32com将 Python 作为 COM 接口连接到 Excel 时,您只连接到 Excel 及其对象库,包括其对象(工作簿、工作表、图表等)及其属性和方法。

事实上,VBA完全按照你在Python中所做的工作:Excel对象库的COM接口。请参阅"工具\引用"下,发现 VBA 通常是第一个选择的引用库。因此,它不是Excel的一部分。非常 选择案例 文档没有指示任何 Excel 方法。因此,您可以在MS Access VBA,Word VBA,Outlook VBA等中使用SELECT CASE

因此,在 Python 中使用 VBASELECT CASE的类似版本,这可能是多行ifelif语句。虽然Java,PHP和R等其他语言保持switch方法,但Python没有这个方法。请参阅 Python 中 switch 语句的替换。

考虑以下示例,使用链接的 Excel 问题:

if not (xlwsh.Cells(i, 2) in [0.4, 0.045, 0.05, 0.056, 0.063, 0.071, 0.08, 0.09]
or xlwsh.Cells(i, 2) < 0):
xlwsh.Rows(i).EntireRow.Delete

最新更新