web-dev-qa-db-fra.com

Comment lire une plage de cellules en utilisant column = numbers au lieu de lettres dans OpenPyXL?

Je sais que je peux lire une plage de cellules en utilisant ce code:

worksheet.cell(range="A1:J1").value

mais je préfère utiliser des chiffres plutôt que des lettres pour sélectionner des colonnes, quelque chose comme ça:

worksheet.cell(row=1,column=1:10).value

Est-ce possible?

4
user5801730

ws.cell() ne peut renvoyer que des cellules individuelles; les plages correspondantes n'ont donc aucun sens. Pour accéder à une plage de cellules, vous pouvez utiliser ws.iter_rows() ou ws.rows ou ws.columns. Jusqu'à la version 2.3 incluse, ws.iter_rows() accepte uniquement la notation de plage de style Excel, mais vous pouvez utiliser des décalages de ligne et de colonne pour créer une plage. À partir de la version 2.4, vous serez en mesure de fournir des valeurs entièrement numériques (indexation à base 1) pour min_row, min_col, max_row et max_col.

5
Charlie Clark

Êtes-vous sûr que worksheet.cell(range="A1:J1").value est possible?

Ce qui précède peut être possible en utilisant la fonction range comme indiqué dans la documentation officielle:

http://openpyxl.readthedocs.io/en/default/api/openpyxl.worksheet.worksheet.html

Il existe 2 façons d'utiliser worksheet.cell:

Utilisation: cellule (coodinate = ’A15’) ou cellule (rangée = 15, colonne = 1)

Si les coordonnées ne sont pas données, il faut indiquer ligne et colonne.

Donc, vous pouvez utiliser une compréhension de liste:

data = [worksheet.cell(row=1,column=i).value for i in range(1,11)]
6
trans1st0r

Il semble que vous souhaitiez diviser une plage en lignes et stocker les valeurs de cellule de chaque ligne dans un tuple ou une liste. Il existe 2 méthodes qui sont propres et faciles pour cela:

Hypothèses:

ws: feuille de calcul, par exemple ws=wb['Sheet1']

rng: toute plage en ws, par ex. rng=ws['A1':'D10'] ou rng=ws['A1':'D' + str(ws.max_column)]

Méthode 1:

t=Tuple(rng)

cela retournera un tuple contenant les n-uplets de chaque ligne. Donc, dans cet exemple, t aura 10 n-uplets et chaque tuple intérieur aura 4 éléments/valeurs.

Méthode 2:

final_list=[]
for row in rng:
    mylist=list(row)
    final_list.append(mylist)

ce sera à peu près la même chose sauf que, au lieu de tuples, vous auriez des listes.

REMARQUE:

une liste de listes ou un nuplet de tuples stockera cells et non leurs valeurs. Pour accéder à leur valeur, procédez comme suit:

first_cell_value=t[0][0].value
0
Ibo