2016-01-12 45 views
11

Tôi muốn chỉ kéo cột A từ bảng tính của mình. Tôi có mã dưới đây, nhưng nó kéo từ tất cả các cột.openpyxl - chỉ đọc một cột từ tệp excel trong python?

from openpyxl import Workbook, load_workbook 

wb=load_workbook("/home/ilissa/Documents/AnacondaFiles/AZ_Palmetto_MUSC_searchterms.xlsx", use_iterators=True) 
sheet_ranges=wb['PrivAlert Terms'] 

for row in sheet_ranges.iter_rows(row_offset=1): 
    for cell in row: 
     print(cell.value) 

Trả lời

0

Tôi khuyên bạn nên sử dụng thư viện gấu trúc.

import pandas as pd 
dataFrame = pd.read_excel("/home/ilissa/Documents/AnacondaFiles/AZ_Palmetto_MUSC_searchterms.xlsx", sheetname = "PrivAlert Terms", parse_cols = 0) 

Nếu bạn không cảm thấy thoải mái với gấu trúc, hoặc vì bất kỳ lý do nào cần làm việc với openpyxl, lỗi trong mã của bạn là bạn không chọn cột đầu tiên. Bạn gọi một cách rõ ràng cho từng ô trong mỗi hàng. Nếu bạn chỉ muốn cột đầu tiên, thì chỉ nhận cột đầu tiên trong mỗi hàng.

for row in sheet_ranges.iter_rows(row_offset=1): 
    print(row[0].value) 
+0

này vẫn sẽ trở lại một hàng tại một thời điểm . –

1

Sử dụng ws.get_squared_range() để kiểm soát chính xác phạm vi ô, chẳng hạn như một cột, được trả lại.

1

Đây là một chức năng đơn giản:

import openpyxl 

def return_column_from_excel(file_name, sheet_name, column_num, first_data_row=1): 
    wb = openpyxl.load_workbook(filename=file_name) 
    ws = wb.get_sheet_by_name(sheet_name) 
    min_col, min_row, max_col, max_row = (column_num, first_data_row, column_num, ws.max_row) 
    return ws.get_squared_range(min_col, min_row, max_col, max_row) 
7

đây là một thay thế cho câu trả lời trước trong trường hợp bạn whish đọc một hoặc nhiều cột sử dụng openpyxl

import openpyxl 

wb = openpyxl.load_workbook('origin.xlsx') 
first_sheet = wb.get_sheet_names()[0] 
worksheet = wb.get_sheet_by_name(first_sheet) 

#here you iterate over the rows in the specific column 
for row in range(2,worksheet.max_row+1): 
    for column in "ADEF": #Here you can add or reduce the columns 
     cell_name = "{}{}".format(column, row) 
     worksheet[cell_name].value # the value of the specific cell 
     ... your tasks... 

Tôi hy vọng rằng điều này có ích.

+0

ý của bạn là: 'cho hàng trong phạm vi (2, trang tính.max_row + 1):' thay vì 'cho hàng trong phạm vi (2, trang tính.max_row):'? –

+0

Xin chào, không. Bởi vì worksheet.max_row trả về chỉ mục cao nhất với các phần tử trên nó, nếu bạn thêm +1, hàng cuối cùng nó sẽ là một dòng trống. Có thể kiểm tra các ví dụ khác ở đây: [openpyxl] (http://openpyxl.readthedocs.io/en/default/_modules/openpyxl/worksheet/worksheet.html) – ZLNK

+0

vâng, nhưng đối với hàm 'dải ô', thông số thứ hai là độc quyền. Bằng cách này, chúng tôi sẽ bỏ lỡ dữ liệu từ hàng cuối cùng –

0

Sử dụng phản ứng tuyệt vời ZLNK, tôi tạo ra chức năng này có sử dụng danh sách hiểu biết để đạt được kết quả tương tự trong một dòng duy nhất:

def read_column(ws, begin, columns): 
    return [ws["{}{}".format(column, row)].value for row in range(begin, len(ws.rows) + 1) for column in columns] 

Sau đó bạn có thể gọi nó bằng cách thông qua một bảng tính, một hàng để bắt đầu vào và chữ cái đầu tiên của bất kỳ cột bạn muốn quay trở lại:

column_a_values = read_column(worksheet, 2, 'A') 

để trở về cột A và cột B, những thay đổi lời kêu gọi này:

column_ab_values = read_column(worksheet, 2, 'AB') 
1

Sử dụng openpyxl

from openpyxl import load_workbook 
# The source xlsx file is named as source.xlsx 
wb=load_workbook("source.xlsx") 

ws = wb.active 
first_column = ws['A'] 

# Print the contents 
for x in xrange(len(first_column)): 
    print(first_column[x].value) 
0

Bằng cách sử dụng thư viện openpyxl và danh sách comprehensions khái niệm của Python:

import openpyxl 

book = openpyxl.load_workbook('testfile.xlsx') 
user_data = book.get_sheet_by_name(str(sheet_name)) 
print([str(user_data[x][0].value) for x in range(1,user_data.max_row)]) 

Đó là cách tiếp cận khá tuyệt vời và giá trị một thử

Các vấn đề liên quan