只读值为python win32com的Excel单元格

时间:2016-12-15 20:10:57

标签: python excel win32com

我有一个Excel文档,如下所示

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在我的数据集中永远不会为空。提前感谢您提供的任何帮助!

编辑:每个文档的行数并不总是相同。我需要它自动停止。抱歉没有更清楚

2 个答案:

答案 0 :(得分:2)

考虑使用Excel的对象库,特别是其Range ObjectWorksheet.Cells Property。此外,通常在Excel VBA中,您搜索工作表以查找最后一行,然后循环直到您到达它:

Excel工作表

Excel Worksheet

Python COM代码 (使用try / except / finally始终释放资源,无论错误与否)

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

答案 1 :(得分: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)

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