J'essaye de suivre cette question pour ajouter une formule dans mon excel en utilisant python et package openpyxl.

Ce lien est ce dont j'ai besoin pour ma tâche.

Mais dans ce code:

for i, cellObj in enumerate(Sheet.columns[2], 1):
    cellObj.value = '=IF($A${0}=$B${0}, "Match", "Mismatch")'.format(i) 

Je prends une erreur à Sheet.columns[2] une idée pourquoi? je suis le code complet.

J'ai la version python 2.7.13 si cela aide pour cette erreur.

****METTRE À JOUR****

CODE COMPLET:

import openpyxl
wb = openpyxl.load_workbook('test1.xlsx')
print wb.get_sheet_names()
Sheet = wb.worksheets[0]
for i, cellObj in enumerate(Sheet.columns[2], 1):
    cellObj.value = '=IF($A${0}=$B${0}, "Match", "Mismatch")'.format(i)

Message d'erreur :

for i, cellObj in enumerate(Sheet.columns[2], 1):

TypeError: l'objet 'générateur' n'a pas d'attribut ' getitem '

3
Mar 16 juil. 2017 à 23:57

2 réponses

Meilleure réponse

ws.columns et ws.rows sont des propriétés qui renvoient des générateurs. Mais openpyxl prend également en charge le découpage et l'indexation des lignes et des colonnes

Ainsi, ws['C'] donnera une liste des cellules dans la troisième colonne.

3
Charlie Clark 17 juil. 2017 à 08:46

Pour les autres aventuriers de Stack qui souhaitent copier / coller une formule:

# Writing from pandas back to an existing EXCEL workbook

wb = load_workbook(filename=myfilename, read_only=False, keep_vba=True)
ws = wb['Mysheetname']

# Paste a formula Vlookup!  Look at column A, put result in column AC.

for i, cellObj in enumerate(ws['AC'], 1):
    cellObj.value = "=VLOOKUP($A${0}, 'LibrarySheet'!C:D,2,FALSE)".format(i)

Un problème, j'ai un en-tête et la formule l'écrase. Quelqu'un sait comment partir de la ligne 2?

1
Arthur D. Howland 25 avril 2019 à 20:37