2016-12-15 109 views
0

我有一个Excel文档像下面只读的Excel单元格与价值蟒蛇win32com

num value1 value2 

1  A  100 
2  B  
3  c  300 

我想通过value2的东西,拥有超过200的值进行迭代,如果超过200发现的值,打印value1。我遇到的一件大事就是告诉它一旦到达带有文本的单元格的末端就停止for循环。

我的环在理想情况下是这样的:

while columnA is not empty: 
    if value2 > 200: 
      print (value1) 

几个音符:我从win32com我。我的数据集内绝不会出现空白的ColumnA。预先感谢您提供的任何帮助!

编辑:我不会总是有相同数量的行为每个文档。我需要它自动停止。对不起,我不清楚

+0

您是解析xls,xlsx还是格式混合? –

+0

你会考虑使用'pandas'库吗? – zipa

+0

不幸的是我必须使用win32com库。我将只使用xlsx – nico

回答

0

考虑使用Excel的目标库,特别是其Range ObjectWorksheet.Cells Property。此外,通常在Excel VBA中,搜索工作表,找到最后一排,然后循环,直到你达到目标:

Excel工作表

Excel Worksheet

Python的COM代码(使用try//除外最后总是不管错误的或不释放资源)

import win32com.client as win32 

try: 
    f = "myWorkbook.xlsx" 
    xl = win32.gencache.EnsureDispatch('Excel.Application') 
    wb = xl.Workbooks.Open(f) 
    ws = wb.Worksheets(1) 

    xlUp = -4162 
    lastrow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row + 1 

    for i in range(2,lastrow): 
     # LOOP RANGE OBJ 
     if ws.Range("C" + str(i)).Value is not None and ws.Range("C" + str(i)).Value > 200: 
      print(ws.Range("B" + str(i)).Value) 

     # LOOP CELLS OBJ 
     if ws.Cells(i,3).Value is not None and ws.Cells(i,3).Value > 200: 
      print(ws.Cells(i,2).Value) 

    wb.Close(False) 
    xl.Quit 

except Exception as e: 
    print(e) 

finally: 
    ws = None 
    wb = None 
    xl = None 

输出

c 
c 
+0

谢谢!这大大帮助了我。 “lastrow”代码正是我所期待的。 – nico

0

我不知道你如何解析excel文件,但如果你使用xlrd模块,我认为这样的东西可能会起作用。

workbook = xlrd.open_workbook('read_file.xlsx') 

    worksheet = workbook.sheet_by_index(0) 

    for i in range(1,4): 
     if worksheet.cell(i, 2).value > 200: 
      print worksheet.cell(i,1) 

为循环范围我认为你可以指定的行数,但我不记得现在。

+0

但这并不意味着我将永远需要知道行数? – nico

+0

我在范围内(1,worksheet.nrows) – Dynamics