2017-08-29 2 views
1

Ich versuche, eine Formel in eine Zelle schreiben und für die gesamte Spalte schreiben. Für jede Zelle in der Spalte wird jedoch = (E2-F2)/C2 gelesen. Für jede Zelle in der gleichen Spalte wie bekomme ich es so (E3-F3)/C3 und so weiter?Openpyxl Formel Füllung für die gesamte Spalte

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

Für mich sind Sie Ziel ist nicht klar angegeben. Sie sagen, es liest eine Formel (erhalten aus der Formel in Ihrem Code angegeben), aber Sie möchten, dass es eine andere Formel liest. Wenn Sie nur die hart codierte Formel in Ihrem Code ändern, wird das Problem nicht behoben? Möchten Sie stattdessen Werte in der Formel für jede Zeile in der Spalte erhöhen? Wenn Sie also eine Zeilenvariable in einer Schleife inkrementieren und in eine Zeichenfolge umwandeln würden, wäre eine bessere Klärung der Zielsetzungen hilfreich. – davedwards

+0

Sorry, wenn ich nicht klar bin. Ich versuche, Werte in der Formel in jeder Zeile derselben Spalte zu erhöhen. –

+1

danke für die Klärung. Sie könnten wahrscheinlich [enumerate] (http://docs.python.org/2/library/functions.html#enumerate) in der for-Schleife verwenden, um die Zeilennummer zu erhalten, und dann diesen Zeilenwert an "n" zuweisen. Vielleicht etwas wie: 'für row, cellObj in enumerate (Liste (Sheet.columns) [6]):' ... 'n = '= (E% dF% d)/C% d'% (Zeile, Zeile, Zeile) ' – davedwards

Antwort

2

Von meinem Kommentar, hier ist der for -loop Code in voller Länge:

# 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 

Hoffnung, das hilft.

Verwandte Themen