简体   繁体   English

迭代工作表、行、列

[英]Iterate over Worksheets, Rows, Columns

I want to print all data (all rows) of a specific column in python using openpyxl I am working in this way;我想使用openpyxl在 python 中打印特定列的所有数据(所有行)我正在以这种方式工作;

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)

But it gives但它给

if row < 1 or column < 1: TypeError: unorderable types: tuple() < int()如果行 < 1 或列 < 1: TypeError: unorderable types: tuple() < int()

Because i am iterating in row=i .因为我在row=i迭代。 If I use sheet.cell(row=4, column=2).value it print the value of cell.如果我使用sheet.cell(row=4, column=2).value它打印单元格的值。 But how can I iterate over all document?但是如何遍历所有文档?

Edit 1编辑 1

On some research, it is found that data can be get using Sheet Name.在一些研究中,发现可以使用 Sheet Name 获取数据。 The Sheet 1 exists in the .xlsx file but its data is not printing. Sheet 1存在于.xlsx文件中,但其数据未打印。 Any problem in this 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

Read the OpenPyXL Documentation阅读OpenPyXL 文档

Iteration over all worksheets in a workbook , for instance:迭代worksheets workbook所有worksheets ,例如:

for n, sheet in enumerate(wb.worksheets):
    print('Sheet Index:[{}], Title:{}'.format(n, sheet.title))

Output :输出

 Sheet Index:[0], Title: Sheet Sheet Index:[1], Title: Sheet1 Sheet Index:[2], Title: Sheet2

Iteration over all rows and columns in one Worksheet:迭代一个工作表中的所有rowscolumns

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 over all columns of one row , for instance row==2 :迭代所有columnsrow ,例如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 over all rows , only column 2 :迭代所有rows ,仅第2 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))

Output :输出

<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

Tested with Python:3.4.2 - openpyxl:2.4.1 - LibreOffice: 4.3.3.2用 Python 测试:3.4.2 - openpyxl:2.4.1 - LibreOffice:4.3.3.2

Try this,尝试这个,

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)

This code will read a sheet as if it was a csv and populatte a list of dictionaries in result using the first row as the column titles.此代码将读取工作表,就像它是一个 csv 并使用第一行作为列标题填充result中的字典列表。

        from openpyxl import load_workbook

        result = []
        wb = load_workbook(filename=file_name)
        sheet = wb.active
        col_count = sheet.max_column
        column_names = {}
        for c in range(1, col_count):
            heading = sheet.cell(row=1, column=c).value
            if not heading:
                col_count = c
                break
            column_names[c] = heading

        for r, row_cells in enumerate(sheet.iter_rows(2), 2):
            row = {}
            for c in range(1, col_count):
                value = sheet.cell(row=r, column=c).value
                if type(value) == datetime:
                    value = value.strftime('%Y-%m-%d')
                row[column_names[c]] = value
            result.append(row)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM