通过MS Excel获取Excel行号
我有下面的代码,用于查找匹配单元格值并返回匹配单元格值的行,例如在单元格D57(第58行)上查找值为“LogiGear”,它将返回第58行。我想要改进代码,只查找D列。 我不知道为什么它返回错误“无效的类string”。
有什么build议?
''' get excell row number via MS ''' def GetExcellRowNumberViaMS(strFile, strSheet, text): try: bFound = False #Create an instance of Excel.Application xlApp = win32com.client.Dispatch("Excel.Application") lnRowNumber=0; i = 1 lastrow = xlSheet.UsedRange.Rows.Count lastcol = xlSheet.UsedRange.Columns.Count while(i<65000 and bFound ==False): if(i == lastrow+1): break j = 1 while(j<256): if(j == lastcol+1): break value = str(xlSheet.Cells(i,j).Text) if(value.strip() == str(text).strip()): lnRowNumber = i bFound = True break j = j + 1 i = i + 1 return lnRowNumber except Exception: return 0
当问一个问题时,包含预期input和输出的一个小例子是有帮助的。 (你应该为将来的问题做这个)
这是我在Excel中编写的一个例子。 我们想find一个Vegetable
行。
您最初发布的代码会search所有行和列。 简化和写成“pythonic”风格时,它看起来像:
import win32com.client excel = win32com.client.Dispatch("Excel.Application") worksheet = excel.ActiveSheet # The currently open worksheet, in the currently open file. # This version searches all rows and columns. for row_num in range(worksheet.UsedRange.Rows.Count): for col_num in range(worksheet.UsedRange.Columns.Count): # Note Python's range() counts from 0 and Excel counts from 1 value = worksheet.Cells(row_num + 1, col_num + 1).Value print ("Value at row %i, column %i is `%s`" % (row_num, col_num, value)) if value == "Vegetable": print "Hooray! Row %i is a vegetable!" % row_num
输出如下所示:
... Value at row 4, column 0 is `5.0` Value at row 4, column 1 is `Eggplant` Value at row 4, column 2 is `Vegetable` Hooray! Row 4 is a vegetable! Value at row 5, column 0 is `6.0` ...
上面的代码遍历所有列号。 你可以告诉它只看一列,通过修改col_num
是一个特定的数字。
for row_num in range(worksheet.UsedRange.Rows.Count): col_num = 2 # Fixed to look at column 2 only # Note Python's range() counts from 0 and Excel counts from 1 value = worksheet.Cells(row_num + 1, col_num + 1).Value print ("Value at row %i, column %i is `%s`" % (row_num, col_num, value)) if value == "Vegetable": print "Hooray! Row %i is a vegetable!" % row_num
输出现在看起来像:
Value at row 0, column 2 is `Fruit` Value at row 1, column 2 is `Fruit` Value at row 2, column 2 is `Fruit` Value at row 3, column 2 is `Fruit` Value at row 4, column 2 is `Vegetable` Hooray! Row 4 is a vegetable! Value at row 5, column 2 is `Fruit`
注意只有一行代码被改变了。
最后,
except Exception: return 0
捕捉所有的例外是可怕的做法。 它可以防止你看到错误。 如果看不到错误,则无法debugging。