私はいくつかのテストを実行し、結果を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ブロックですか?しかし、ボタンをクリックしたときに、すでに新しいシートを作成していると思いました。私はあなたの助けに感謝します。
おそらく、シートにdata_book.add_sheet(str(loc)+ "N" + str(N)+ "d" + str(dis)+ TIME)のタイムスタンプを追加してください。その後、それぞれのシートは異なる名前になりますか? –
ありがとうTim。私はそれが問題だと思ったが、loc、N、disの値を変えると同じ例外が発生した(これらの値を変えても、あなたが提案しているものと同じ終わりを達成すると信じる) –
マインド。あなたがそれを整理してうれしい! –