2016-06-16 16 views
0

私はいくつかのテストを実行し、結果をExcelシートに保存するGUIを備えた簡単なアプリケーションを持っています。私の問題は、プリセットを変更してボタンを押すたびに、プログラムが最後のテストで作成されたデータを上書きしようとするのではなく、新しいシートを作成することです。ここにいくつかのコードがあります。python xlwtは、新しいシートを作成するのではなく、既存のシートを上書きしようとします。

data_book = xlwt.Workbook(encoding = "utf-8") 

def TEST(): 
    ### Irrelevant code that does a few calculations ### 



    # Prepare data storage 

    #data_book = xlwt.Workbook(encoding = "utf-8") commented out, same code outside of function 

    sheet = data_book.add_sheet(str(loc) + "N"+ str(N) + "d" + str(dis)) #names the sheet using values from UI 
    sheet.write(0, 0, "Title") #title the sheet 
    for i in range(10): #small number for debugging 
     for a2 in A2: 
      sheet.write(i+1, 3, a2) 
      sheet.write(i+1, 2, eng.test(wav_arr[ i ], A1, a2, N)) 
      sheet.write(i+1, 1, txt_arr[ i ]) 
      sheet.write(i+1, 0, dt.now()) 
    # Save sheet to workbook  
    data_book.save("test"+str(d.today())+".xls") 
    print "data saved. Test complete." 
    clear(master_arr) 

# this is the button, calls the test when pressed 
b = Button(master, text = "Test!", command = lambda: TEST()) 
b.pack() 

これを解決する方法はわかりません。ご覧のとおり、私はTEST()関数の中でdata_bookの作成を移動しようとしましたが、それは助けになりませんでした。上書きの例外が発生したときに明示的に新しいシートを作成するtry-exceptブロックですか?しかし、ボタンをクリックしたときに、すでに新しいシートを作成していると思いました。私はあなたの助けに感謝します。

+1

おそらく、シートにdata_book.add_sheet(str(loc)+ "N" + str(N)+ "d" + str(dis)+ TIME)のタイムスタンプを追加してください。その後、それぞれのシートは異なる名前になりますか? –

+0

ありがとうTim。私はそれが問題だと思ったが、loc、N、disの値を変えると同じ例外が発生した(これらの値を変えても、あなたが提案しているものと同じ終わりを達成すると信じる) –

+1

マインド。あなたがそれを整理してうれしい! –

答えて

0

私はこの問題を解決しました。興味のある人は、sheet.write()関数のネストされたfor-loopを見てください。インデックスが設定されている方法に注目すると、関数は配列A2のすべての値に対して同じセルに書き込むように指示されています。プログラムがセルを上書きしようとすると、例外が発生します。

関連する問題