[英]Get Excel row number via MS Excel
我有下面的代码,它用于查找匹配的单元格值并返回匹配的单元格值的行,例如在单元格D57(第58行)上查找值是“ LogiGear”,它将返回第58行。我想对此进行改进代码,仅查找D列。 我不知道为什么它返回错误“无效的类字符串”。
有什么建议吗?
'''
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
提出问题时,包括一个预期输入和输出的小示例会很有帮助。 (对于以后的问题,您应该这样做。)
这是我在Excel中编写的一个示例。 我们要查找的是Vegetable
行。
您最初发布的代码将搜索所有行和列。 当简化并以“ 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
捕获所有异常是可怕的做法。 它可以防止您看到错误。 如果看不到错误,则无法调试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.