2017-03-07 6 views
2

私は任意の長さのリストを生成し、それをExcelスプレッドシートに出力するコードを持っています。ここで、xは、スプレッドシートの一番下の行である:「= AVERAGE(AX A1)」は、この出力理論でxlsxwriterのpythonで26個以上の列に出力

for i in range(years): 
    average = "=AVERAGE(" 
    average += chr(65+i) 
    average += "1:" 
    average += chr(65+i) 
    average += str(x) 
    average += ")" 
    worksheet.write(x, i, average) 

:それは、次のコードを持つ列のそれぞれを合計します。私はちょうど26より大きい幅を扱えるようにしたい、つまり、年がchr(65 + i)の代わりに26より大きい場合、コードは "= AVERAGE(AA1:AAx)"と言うことができます。

おかげ

すべての
+1

は、あなたの代わりにXLSXのcsvファイルを使用して考えられていますか?任意の長さの行を書くほうがはるかに簡単です。 Excelでファイルを使用することもできます。 – Denziloe

答えて

1

ExcelのChar()変換を必要とすることなく列番号からColumnLetterを計算するために定義された方法を考えてみましょう。そして、あなたはまた、それが文字列に(row, col)値を変換するために提供した機能を使用することができますが、XlsxWriterを使用している場合

def ColumnLetter(ColumnNumber): 
    s = '' 
    alpha = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ') 
    n = int(ColumnNumber) 

    while n > 0: 
     c = ((n - 1) % 26) 
     s = alpha[c] + s 
     n = (n - c) // 26 

    return s 

for i in range(years): 
    average = "=AVERAGE(" 
    average += ColumnLetter(i) 
    average += "1:" 
    average += ColumnLetter(i) 
    average += str(x) 
    average += ")" 
    worksheet.write(x, i, average) 
+0

初めて作業しました。どうもありがとうございました! – IvanReilly

0

まず、あなたが対処するのは非常に迷惑しているのxlsxファイルを、使用を避ける必要がありますすることができます。

第2に、Python内から平均を計算し、それをExcelファイルに書き込むことを考えましたか?

ことはまだ可能ではない場合は、ここに私の解決策は、/

def col_to_char(column): 
    """convert from column number to column name""" 

    if column == 0: return 'A' 
    name='' 

    while column!=0: 
     name += (chr(65 + column % 26)) 
     column = column // 26 
    return name 

(ものがベース26数にあなたの列番号を変換し、対応する英数文字で各桁を関連付けるために実際にある)です!

:(?)最初のもの1つの

あなたのコードは次のようになりだろう\数字、すなわち最初は0であることではなく、「excelic」で、ニシキヘビの方法で現在地の列に注意1、

for i in range(years): 
    column_name=col_to_char(i) 
    average = "=AVERAGE(" +column_name +"1:" +column_name +str(x) +")" 
    worksheet.write(x, i, average) 
1

from xlsxwriter.utility import xl_rowcol_to_cell 
from xlsxwriter.utility import xl_range 

cell = xl_rowcol_to_cell(0, 26) 
cell_range = xl_range(0, 26, 66, 26) 
formula = '=AVERAGE({})'.format(cell_range) 

print(cell)  # AA1 
print(cell_range) # AA1:AA67 
print(formula)  # =AVERAGE(AA1:AA67) 

は詳細についてはXlsxWriterドキュメントのWorking with Cell Notationセクションを参照してください。

+1

モジュールの作成者から聞いてうれしいです:-) –

関連する問題