2017-03-23 59 views
2

我想用python打印特定列的所有數據(所有行)使用openpyxl我正在以這種方式工作;對工作表,行,列進行迭代

from openpyxl import load_workbook 
workbook = load_workbook('----------/dataset.xlsx') 
sheet = workbook.active 
for i in sheet: 
    print(sheet.cell(row=i, column=2).value) 

但它給

if row < 1 or column < 1: TypeError: unorderable types: tuple() < int()

,因爲我在row=i迭代。如果我使用sheet.cell(row=4, column=2).value它打印單元格的值。但是,我如何遍歷所有文檔?

編輯1

在一些研究,發現數據可以使用表名稱得到。 Sheet 1存在於.xlsx文件中,但其數據未打印。此代碼中的任何問題?

workbook = load_workbook('---------------/dataset.xlsx') 
print(workbook.get_sheet_names()) 
worksheet =workbook.get_sheet_by_name('Sheet1') 
c=2 
for i in worksheet: 
    d = worksheet.cell(row=c, column=2) 
    if(d.value is None): 
     return 
    else: 
     print(d.value) 
    c=c+1 
+0

閱讀此問題的答案以獲取提示它是如何工作的:http://stackoverflow.com/questions/42777213/how-do-i-use-openpyxl-and-仍然保持oop結構 – stovfl

+0

@stovfl它不工作。 – Humty

+0

遍歷所有行,你可以使用'iter_rows'就像'sheet.iter_rows(row_offset = 1)' –

回答

4

閱讀OpenPyXL Documentation

迭代所有worksheetsworkbook,例如:

for sheet in wb.worksheets: 
    print('sheet.title=%s' % sheet.title) 

輸出

sheet.title=Sheet 
sheet.title=Sheet1 
sheet.title=Sheet2 

迭代在所有rows一個工作表columns

worksheet = workbook.get_sheet_by_name('Sheet') 

for row_cells in worksheet.iter_rows(): 
    for cell in row_cells: 
     print('%s: cell.value=%s' % (cell, cell.value)) 

輸出

<Cell Sheet.A1>: cell.value=²234 
<Cell Sheet.B1>: cell.value=12.5 
<Cell Sheet.C1>: cell.value=C1 
<Cell Sheet.D1>: cell.value=D1 
<Cell Sheet.A2>: cell.value=1234 
<Cell Sheet.B2>: cell.value=8.2 
<Cell Sheet.C2>: cell.value=C2 
<Cell Sheet.D2>: cell.value=D2 

迭代過一個row的所有columns,例如row==2

for row_cells in worksheet.iter_rows(min_row=2, max_row=2): 
    for cell in row_cells: 
     print('%s: cell.value=%s' % (cell, cell.value)) 

輸出

<Cell Sheet.A2>: cell.value=1234 
<Cell Sheet.B2>: cell.value=8.2 
<Cell Sheet.C2>: cell.value=C2 
<Cell Sheet.D2>: cell.value=D2 

迭代過所有rows,僅column

for col_cells in worksheet.iter_cols(min_col=2, max_col=2): 
    for cell in col_cells: 
     print('%s: cell.value=%s' % (cell, cell.value)) 

輸出

<Cell Sheet.B1>: cell.value=12.5 
<Cell Sheet.B2>: cell.value=8.2 
<Cell Sheet.B3>: cell.value=9.8 
<Cell Sheet.B4>: cell.value=10.1 
<Cell Sheet.B5>: cell.value=7.7 

與Python測試:3.4.2 - openpyxl:2.4。1 - LibreOffice:4.3.3.2

+0

我怎樣才能得到'Sheet1'的數據? – Humty

+0

我需要特定列的數據但所有行。可以說我只需要整個文檔的第二列值。 – Humty

0

試試這個,

from openpyxl import load_workbook 
workbook = load_workbook('----------/dataset.xlsx') 
sheet = workbook.active 
row_count = sheet.max_row 
for i in range(row_count): 
    print(sheet.cell(row=i, column=2).value) 
+0

查看edit1的問題 – Humty