web-dev-qa-db-fra.com

openpyxl - ne lit qu'une colonne du fichier Excel en python?

Je veux extraire uniquement la colonne A de ma feuille de calcul. J'ai le code ci-dessous, mais il tire de toutes les colonnes.

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

c'est une alternative aux réponses précédentes si vous voulez lire une ou plusieurs colonnes en utilisant 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... 

J'espère que cela sera utile.

10
ZLNK

Utiliser 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) 
5
Harilal Remesan

Je suggère d'utiliser la bibliothèque de pandas. 

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

Si vous ne vous sentez pas à l'aise dans les pandas, ou pour une raison quelconque, devez travailler avec openpyxl, l'erreur dans votre code est que vous ne sélectionnez pas seulement la première colonne. Vous appelez explicitement pour chaque cellule de chaque ligne. Si vous ne voulez que la première colonne, n'obtenez que la première colonne de chaque ligne.

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

A mon avis c'est beaucoup plus simple

from openpyxl import Workbook, load_workbook
wb = load_workbook("your Excel file")
source = wb["name of the sheet"]
for cell in source['A']:
    print(cell.value)
1
Lorenzo

En utilisant la bibliothèque openpyxl et le concept de compréhension de liste de 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)])

C'est une approche assez incroyable et vaut la peine d'essayer

1
Serhii Aksiutin

Voici une fonction simple:

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

Utilisez ws.get_squared_range() pour contrôler avec précision la plage de cellules renvoyée, telle qu'une seule colonne.

1
Charlie Clark

En utilisant l'excellente réponse de ZLNK, j'ai créé cette fonction qui utilise la compréhension de liste pour obtenir le même résultat en une seule ligne: 

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]

Vous pouvez ensuite l'appeler en passant une feuille de calcul, une ligne pour commencer et la première lettre de la colonne à renvoyer:

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

Pour renvoyer les colonnes A et B, l’appel devient:

column_ab_values = read_column(worksheet, 2, 'AB')
0
ewilan