2016-12-15 4 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 Object или Worksheet.Cells Property. Кроме того, как правило, в Excel VBA, вы будете искать в таблицу, чтобы найти последнюю строку, а затем цикл, пока вы не достигнете его:

Excel листа

Excel Worksheet

Python COM код(с использованием попробовать/за исключением /, наконец, всегда освободить ресурсы независимо от ошибки или нет)

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

для i в диапазоне (1, рабочий лист.) – Dynamics

Смежные вопросы