2017-08-29 2 views
1

J'essaie d'écrire une formule dans une cellule et d'écrire pour toute la colonne. Cependant, pour chaque cellule de la colonne, on lit = (E2-F2)/C2. Pour chaque cellule sur la même colonne, comment l'obtenir ainsi (E3-F3)/C3 et ainsi de suite?Openpyxl Remplissage de la colonne entière

import openpyxl 

wb = openpyxl.load_workbook('yes.xlsx') 
Sheet = wb.get_sheet_by_name('Sheet1') 

n = '=(E2-F2)/C2' 
for cellObj in list(Sheet.columns)[6]: 
    cellObj.value = n 
wb.save("row_creation_loop.xlsx") 
+0

Pour moi, votre objectif n'est pas clairement indiqué. Vous dites qu'il lit une formule (obtenue à partir de la formule spécifiée dans votre code), mais vous voulez qu'il lise une formule différente. Juste changer la formule codée en dur dans votre code ne va pas le réparer? Voulez-vous plutôt incrémenter des valeurs dans la formule pour chaque ligne dans la colonne? Si donc l'incrémentation d'une variable de ligne dans une boucle et sa conversion en une chaîne fonctionneraient, plus de précisions sur votre objectif aideraient à offrir une solution. – davedwards

+0

Désolé si je ne suis pas clair. J'essaye d'avoir des valeurs incrémentées dans la formule à chaque rangée de la même colonne. –

+1

merci de clarifier. Vous pourriez probablement utiliser [énumérer] (http://docs.python.org/2/library/functions.html#enumerate) dans la boucle for pour obtenir le numéro de ligne, puis affecter cette valeur de ligne à 'n'. Peut-être quelque chose comme: 'pour row, cellObj dans enumerate (list (Sheet.columns) [6]):' ... 'n = '= (E% dF% d)/C% d'% (ligne, ligne, row) ' – davedwards

Répondre

2

De mon commentaire, voici le for -loop code complet:

# n = '=(E2-F2)/C2' # move this assignment into the for-loop 

for row, cellObj in enumerate(list(Sheet.columns)[6]): 
    print cellObj 
    n = '=(E%d-F%d)/C%d' % (row, row, row) 
    # print n # check that n gets assigned correct string value 
    cellObj.value = n 

Hope this helps.