2017-03-23 8 views
2

Ich möchte alle Daten (alle Zeilen) einer bestimmten Spalte in Python mit openpyxl Ich arbeite auf diese Weise;Iteration über Arbeitsblätter, Zeilen, Spalten

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) 

Aber es gibt

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

Weil ich in row=i bin iterieren. Wenn ich sheet.cell(row=4, column=2).value verwende, wird der Wert der Zelle ausgegeben. Aber wie kann ich über alle Dokumente iterieren?

Edit 1

Auf einigen Untersuchungen wurde festgestellt, dass die Daten sein kann mit Blattname erhalten. Die Datei Sheet 1 existiert in der Datei .xlsx, aber ihre Daten werden nicht gedruckt. Irgendein Problem in diesem Code?

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

Lesen Sie die Antwort von dieser Frage, um einen Hinweis zu erhalten, wie es funktioniert: http://stackoverflow.com/questions/42777213/how-doi-i-use-openpyxl-and- still-instandhaltung-oop-struktur – stovfl

+0

@stovfl Es funktioniert nicht. – Humty

+0

um über alle Zeilen zu iterieren, können Sie 'iter_rows' wie' sheet.iter_rows (row_offset = 1) ' –

Antwort

4

die über alle OpenPyXL Documentation

Iteration Lesen worksheets in einem workbook, zum Beispiel:

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

Ausgang:

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

Iteration über alle rows und columns in einem Arbeitsblatt:

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)) 

Output:

<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 

Iteration über alle columns von einerrow zum Beispiel 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)) 

Output:

<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 

Iteration über alle rows nur 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)) 

Ausgang:

<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 

mit Python getestet: 3.4.2 - openpyxl: 2.4.1 - LibreOffice: 4.3.3.2

+0

Wie kann ich nur die Daten von' Sheet1' bekommen? – Humty

+0

Ich brauche Daten einer bestimmten Spalte, aber alle Zeilen. Sagen wir, ich brauche nur die zweiten Spaltenwerte des ganzen Dokuments. – Humty

0

die Sie interessieren,

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

verwenden Siehe die edit1 in Frage – Humty

Verwandte Themen