2009-07-12 4 views
1

Je voudrais insérer un calcul dans Excel en utilisant Python. Généralement, cela peut être fait en insérant une chaîne de formule dans la cellule concernée. Cependant, si j'ai besoin de calculer une formule plusieurs fois pour toute la colonne , la formule doit être mise à jour pour chaque cellule individuelle. Par exemple, si j'ai besoin de calculer la somme de deux cellules, alors pour la cellule C (k) le calcul serait A (k) + B (k). En Excel, il est possible de calculer C1 = A1 + B1 puis d'étendre automatiquement le calcul en déplaçant la souris de C1 vers le bas. Ma question est la suivante: est-il possible de faire la même chose avec Python, c'est-à-dire de définir une formule dans une seule cellule puis d'utiliser les capacités d'Excel pour étendre le calcul pour toute la colonne/ligne?Calcul de formules dans Excel avec Python

Nous vous remercions à l'avance, Sasha

+0

Un exemple de code serait utile. Quel module utilisez-vous? sur quoi es-tu? – Paul

+0

Je travaille avec Windows, Excel 2003, un paquetage appelé EasyExcel - il est juste un certain nombre de fonctions utiles mises en œuvre avec COM – Sasha

Répondre

0

Si vous utilisez les liaisons COM, vous pouvez simplement enregistrer une macro dans Excel, puis le traduire en code Python.
Si vous utilisez xlwt, vous devez recourir à des boucles normales en python ..

+0

J'utilise COM, macro enregistrée, mais je ne sais pas comment traduire les éléments suivants: ActiveCell.FormulaR1C1 = "= R [-1] C [-7]/RC [-10] * R [-1] C" Plage ("M6") Sélectionner Selection.AutoFill Destination: = Plage ("M6: M592") Range ("M6: M592"). Sélectionnez – Sasha

3

Comme Roberto mentionne, vous pouvez utiliser xlwt et fidèle pour la boucle:

import xlwt 

w = xlwt.Workbook() 
ws = w.add_sheet('mysheet') 

for i in range(10): 
    ws.write(i, 0, i) 
    ws.write(i, 1, i+1) 
    ws.write(i, 2, xlwt.Formula("$A$%d+$B$%d" % (i+1, i+1))) 

w.save('myworkbook.xls') 
+0

Bien sûr, il est possible de le faire, mais ma question était de savoir comment le faire en utilisant la fonction AutoFill d'Excel ... – Sasha

+0

'def _num_to_let (num): si num> 25: renvoie _num_to_let (num/26-1) + chr (97 + num% 26) return chr (97 + num) ' – engineerchuan

0

Sasha,

code Python traduit de votre macro ressemblerait à ceci:

startCell = mySheet.Range("M6") 
wholeRange = mySheet.Range("M6:M592") 
startCell.FormulaR1C1 = "=R[-1]C[-7]/RC[-10]*R[-1]C" 
startCell.AutoFill(Destination=wholeRange) 

Je ne l'ai pas testé, mais je l'écris souvent au travail. Faites-moi savoir si cela ne fonctionne pas.

+0

@Greg: veuillez éditer votre réponse pour que le code apparaisse comme 4 lignes et non 1 ligne ... indice: commencez chaque ligne avec 4 espaces. –

+0

Hmm, je pensais que je l'ai fait ... OK, réparé. – Greg

0

Si vous voulez parcourir dans le sens horizontal, voici une fonction que j'utilise. 0 -> a, 26 -> aa, 723 -> AAV

def _num_to_let(num): 
     if num > 25: 
      return _num_to_let(num/26-1) + chr(97+ num % 26) 
     return chr(97+num) 
0

Si vous voulez itérer dans xlwt pour les colonnes (dans les formules), vous pouvez utiliser le module Utils de xlwt comme ceci:

from xlwt import Utils 
print Utils.rowcol_pair_to_cellrange(2,2,12,2) 
print Utils.rowcol_to_cell(13,2) 
>>> 
C3:C13 
C14 
Questions connexes