2016-07-27 21 views
5

Tôi không thể tìm ra cách lặp qua tất cả các hàng trong cột được chỉ định với openpyxl.lặp qua tất cả các hàng trong cột cụ thể openpyxl

Tôi muốn in tất cả các giá trị di động cho tất cả các hàng trong cột "C"

Ngay bây giờ tôi có:

from openpyxl import workbook 
path = 'C:/workbook.xlsx' 
wb = load_workbook(filename = path) 
ws=wb.get_sheet_by_name('Sheet3') 

for row in ws.iter_rows(): 
    for cell in row: 
     if column == 'C': 
      print cell.value 
+0

What's 'ws'? Bạn đã sử dụng 'openpyxl' như thế nào? Vui lòng cung cấp thêm một số chi tiết về mục tiêu bạn đang cố gắng đạt được hoặc nếu không mọi câu trả lời sẽ dựa trên các giả định. – danielhadar

Trả lời

8

Bạn có thể chỉ định một phạm vi để lặp qua với ws.iter_rows():

import openpyxl 

wb = openpyxl.load_workbook('C:/workbook.xlsx') 
ws = wb.get_sheet_by_name('Sheet3') 
for row in ws.iter_rows('C{}:C{}'.format(ws.min_row,ws.max_row)): 
    for cell in row: 
     print cell.value 

Chỉnh sửa: mỗi Charlie Clark bạn có thể luân phiên sử dụng ws.get_squared_range():

# ... 
    ws.get_squared_range(min_col=1, min_row=1, max_col=1, max_row=10) 
# ... 

Chỉnh sửa 2: Theo nhận xét của bạn, bạn muốn các giá trị tế bào trong một danh sách:

import openpyxl 

wb = openpyxl.load_workbook('c:/_twd/2016-06-23_xlrd_xlwt/input.xlsx') 
ws = wb.get_sheet_by_name('Sheet1') 
mylist = [] 
for row in ws.iter_rows('A{}:A{}'.format(ws.min_row,ws.max_row)): 
    for cell in row: 
     mylist.append(cell.value) 
print mylist 
+0

hoàn hảo! Điều đó đã làm chính xác những gì tôi đang tìm kiếm, cảm ơn rất nhiều! –

+0

Bạn đang rất hoan nghênh. Vui lòng xem xét chấp nhận câu trả lời này với dấu kiểm màu xanh lục. – bernie

+1

'ws.get_squared_range()' sẽ cho phép bạn sử dụng các ranh giới số. Ở chế độ chỉ đọc 'ws.max_row' có thể không có sẵn. openpyxl 2.4 có API tốt hơn tại đây. –

4

Tại sao không thể bạn chỉ cần lặp trên cột 'C' (phiên bản 2.4.7):

for cell in ws['C']: 
    print cell.value 
Các vấn đề liên quan