J'ai ce qui ressemble à un problème avec une solution relativement simple, mais à ce stade, cela échappe à mes recherches. J'essaie d'écrire des éléments d'un tuple sur quatre lignes consécutives en utilisant une boucle for, mais je n'arrive pas à le comprendre. Je soupçonne que cela peut être fait avec le module iter_rows dans le package openpyxl, mais je n'ai pas été en mesure de l'appliquer correctement dans la boucle. Le morceau de code suivant entraîne la génération d'un fichier .xlsx avec le dernier élément du tuple affecté à la cellule 'A2':

from openpyxl import Workbook

nfc_east = ('DAL', 'WAS', 'PHI', 'NYG')

wb = Workbook()

ws = wb.active

row_cell = 2

for i in nfc_east:

    column_cell = 'A'
    ws.cell(row = row_cell, column = column_cell).value = str(i)
    row_cell = row_cell + 1

wb.save("row_creation_loop.xlsx")

Toutes les suggestions et critiques (constructives) sont les bienvenues. Je vous remercie!

1
jwelliott28 14 juil. 2015 à 08:08

2 réponses

Meilleure réponse

Si tout ce que vous voulez faire est d'écrire les cellules du tuple, vous pouvez le faire directement avec une syntaxe comme - ws['A1'] = <something> cela écrirait la valeur dans la cellule A1.

Exemple -

from openpyxl import Workbook
nfc_east = ('DAL', 'WAS', 'PHI', 'NYG')
wb = Workbook()
ws = wb.active
for row, i in enumerate(nfc_east):
    column_cell = 'A'
    ws[column_cell+str(row+2)] = str(i)

wb.save("row_creation_loop.xlsx")

Lorsque vous utilisez la syntaxe - ws.cell(row = row_cell, column = column_cell).value, la cellule_colonne doit être un entier, pas une chaîne, donc pour la colonne A, vous devez donner la valeur de l'argument column comme {{X3 }} (pour B ce serait 2), etc.

0
Anand S Kumar 14 juil. 2015 à 05:46

Votre code ne fonctionne pas pour moi (Invalid column index A). Quelle version de pyxl utilisez-vous? AFAIK pyxl utilise des index entiers. Le code suivant produit la sortie que vous recherchez (je pense).

from openpyxl import Workbook

nfc_east = ('DAL', 'WAS', 'PHI', 'NYG')
wb = Workbook()
ws = wb.active

start_row = 2
start_column = 1

for team in nfc_east:
    ws.cell(row=start_row, column=start_column).value = team
    start_row += 1

wb.save("row_creation_loop.xlsx")

#  Prints...
#
#   |  A  |
# 1 |     |
# 2 | DAL |
# 3 | WAS |
# 4 | PHI |
# 5 | NYG |
0
johnharris85 14 juil. 2015 à 05:45