通过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。