2016-12-15 108 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