Cara menggunakan tkinter export to excel

I'm tryng to use a Tkinter window to ask for data entries, then take those entries, store the data into a Pandas DataFrame and later export the DataFrame to Excel. I want to store several rows of data from these user entries, and to save after each entry. Later I want to export the stored data. But my problem is I can't seem to get the data into a DataFrame. I've managed to export, an Excel file, but the only value it stored was Blank. Is there an easy way to get those values and insert them into a DataFrame? I'm familiar with Pandas and know how to export, but I'm fairly new to Tkinter.

I have tried inserting data with insert() to the DataFrame, I've tried using entry.get() to store the values and pass them to the DataFrame, but none of those worked. I've now tried to use get() for the values, store them into a list and then turn that list into a DataFrame, but the values just won't go into the DataFrame. I haven't tried openpyxl because the examples I have read don't seem to work for what I have in mind, meaning that I could manage to export a file with the example data but not for the actual purpose of my code.

import tkinter as tk
import pandas as pd

def saveinfo():
    valor = entry1.get()
    list.append(valor)

def export():
    df = pd.DataFrame(list)
    df.to_excel("DataBase.xlsx")

def opennewwindow():
    window.destroy()
    newwindow=tk.Tk()
    newwindow.geometry("500x150")
    newwindow.title("Hi! ")
    titulo = tk.Label(newwindow, text = "Please, enter data: ", font=("Calibri", 10)).grid(column = 0, row = 0)
    textoentry1 = tk.Label(newwindow, text = "Number", font = ("Arial", 8)).grid(column = 0, row = 1)
    entry1 = tk.Entry(newwindow, width=10).grid(column = 1, row = 1)
    textoentry2 = tk.Label(newwindow, text = "Description", font = ("Arial", 8)).grid(column = 0, row = 2)
    entry2 = tk.Entry(newwindow, width=10).grid(column = 1, row = 2)
    textoentry3 = tk.Label(newwindow, text = "Brand", font = ("Arial", 8)).grid(column = 0, row = 3)
    entry3 = tk.Entry(newwindow, width=10).grid(column = 1, row = 3)
    botonguardar = tk.Button(newwindow, text = "Save", command = saveinfo).grid(column = 3, row = 2)
    botonexportar = tk.Button(newwindow, text = "Export", command = export).grid(column = 3, row = 3)
    newwindow.mainloop()


df = pd.DataFrame
list = []

window = tk.Tk()
window.geometry("320x156")
window.title("Master")
label = tk.Label(window, text = "Platform", font = ("Arial", 25)).grid(column = 0, row = 0)
boton = tk.Button(window, text = "Choose an element: ", command = opennewwindow)
boton.grid(column = 0, row = 1)

window.mainloop()

I expect to receive an exported Excel file that shows a DataFrame with the values that were written in the Entry boxes. For Example: there are 3 entries and I want an Excel with several rows that show those 3 entries in 3 columns: "Number", "Description" and "Brand". Instead, I get a Blank Excel.

I know that my code is not clean yet, I haven't refactored or tidied up since I'm tryng to get a functional MVP for my idea. Thanks for any feedback or ideas!

Indonesian (Bahasa Indonesia) translation by Yosef Andreas (you can also view the original English article)

Saya percaya kamu telah menggunakan Microsoft Excel pada beberapa kesempatan. Itu sangat ampuh ketika berkerja dengan spreadsheet, table, chart, dll. Namun apa yang harus dilakukan Python dengan itu?

Python adalah pengubah arah permainan ketika berhubungan dengan file Excel karena itu dapat mengotomatisasi hal-hal menakutkan yang mungkin akan kamu hadapi dalam beberapa tugas terkait Excel. Sebagai contoh, kamu mungkin diminta untuk mencari beberapa informasi dalam ratusan spreadsheet budget perusahaan. Sangat mengerikan, bukan? Dalam tutorial ini, saya akan menunjukkan bagaimana Python dapat digunakan dengan mudah untuk berkerja dengan dokumen Excel.

Oh, jangan khawatir jika kamu tidak memiliki Microsoft Excel yang terinstal dalam mesinmu. Kamu dapat menggunakan alternatif lainnya untuk mengikuti tutorial ini, seperti LibreOffice Calc dan OpenOffice Calc.

Jadi, mari kita mulai!

OpenPyXL

OpenPyXL adalah librari yang digunakan untuk membaca dan menulis file Excel 2010 xlsx/xlsm/xltk/xltm. Ini adalah librari yang akan kita gunakan dalam tutorial ini untuk berkerja dengan dokumen Excel.

Hal pertama yang perlu kita lakukan untuk memanfaatkan librari ini adalah menginstal OpenPyXL.

Menginstal OpenPyXL

Untuk menginstal OpenPyXL, kita akan menggunakan pip, yaitu (berdasarkan Wikipedia):

Sistem manajemen package yang digunakan untuk menginstal dan mengelola paket software yang ditulis dalam Python. Banyak paket dapat ditemukan dalam Python Package Index (PyPI).

Kamu dapat mengikuti tahap-tahap yang disebutkan dalam Panduan Pemakai Python Packaging untuk menginstal pip, namun jika kamu memiliki Python 2.7.9 dan lebih tinggi, atau Python 3.4 dan lebih tinggi, kamu sudah memiliki pip!

OpenPyXL sekarang dapat dengan mudah diinstal dengan mengetikkan perintah berikut (dalam Terminal Mac OS X):

pip install openpyxl

Membuka Sebuah Dokumen Excel

Setelah menginstal OpenPyXL, kita siap untuk mulai berkerja dengan dokumen Excel. Tugas normal pertama yang akan kita lakukan pada dokumen Excel adalah membuka dokumen itu. Lanjutkan dan download file Excel sample.xlsx untuk mengikuti tutorial ini, atau kamu dapat menggunakan file Excel apapun yang kamu suka.

Sebelum kita dapat menggunakan OpenPyXL, kita perlu melakukan import, seperti berikut:

import openpyxl

Metode yang kita perlukan untuk membuka dokumen Excel adalah load_workbook(). Jika kamu bertanya-tanya apa maksud dari sebuah workbook, itu merupakan dokumen spreadsheet Excel. Script yang kita butuhkan untuk membuka sebuah dokumen Excel adalah sebagai berikut:

import openpyxl
excel_document = openpyxl.load_workbook('sample.xlsx')

Mari sekarang kita lihat type yang dikembalikan dari metode load_workbook(). Ini dapat dilakukan sebagai berikut:

print type(excel_document)

Ini akan menampilkan hasil berikut:

<class 'openpyxl.workbook.workbook.Workbook'>

Seperti yang dapat kita lihat, obyek yang dikembalikan adalah Workbook, pada jenis data workbook. Obyek Workbook di sini mewakili file Excel.

Nama Sheet

Sheet dalam Excel terdiri dari kolom (dengan huruf dimulai dari A, B, C, dll.) dan baris (mulai dari 1, 2, 3, dll.) Untuk memeriksa sheet apa yang kita punya dalam dokumen Excel kita, kita menggunakan metode get_sheet_names() sebagai berikut:

excel_document.get_sheet_names()

Jika kita melakukan print pada perintah di atas, kita mendapatkan hasil berikut:

[u'Sheet1']

Sehingga menunjukkan bahwa kita memiliki satu sheet, bernama Sheet1.

Jika kamu memiliki banyak sheet, kamu dapat mengakses sheet tertentu berdasarkan namanya menggunakan metode ini: get_sheet_by_name().

Mengakses Cell

Sekarang setelah kita mempelajari bagaimana membuka sebuah file Excel dan mendapatkan sheet, mari kita lihat betapa mudahnya untuk mengakses sebuah cell dalam sheet tersebut. Yang harus kamu lakukan adalah menarik sheet tersebut, dan kemudian menentukan lokasi (koordinat) cell itu. Mari katakan bahwa kita ingin mengakses kolom A baris 2 dalam dokumen Excel yang kita punya, yaitu A2. Ini dapat diterapkan sebagai berikut:

sheet = excel_document.get_sheet_by_name('Sheet1')
print sheet['A2'].value

Dalam hal ini, kamu akan memiliki nilai berikut yang dikembalikan: Abder.

Kita dapat juga menggunakan notasi baris-kolom. Sebagai contoh, jika kita ingin mengakses cell pada baris 5 dan kolom 2, kita mengetikkan berikut:

sheet.cell(row = 5, column = 2).value

Hasil dalam hal ini akan menjadi: programmer.

Jika kita ingin melihat jenis obyek yang mewakili cell, kita dapat mengetikkan:

print type(sheet['A2'])

atau:

print sheet.cell(row = 5, column = 2)

Dalam hal ini, kamu akan mendapatkan output berikut:

<class 'openpyxl.cell.cell.Cell'>

yang berarti bahwa obyek adalah jenis Cell.

Mengakses Rentang Cell

Bagaimana jika kamu tertarik dalam mengakses rentang cell daripada hanya satu cell? Mari katakan kita ingin mengakses cell dari A1 ke B3, yang tampak seperti ini dalam dokumen Excel kita?

Cara menggunakan tkinter export to excel
Cara menggunakan tkinter export to excel
Cara menggunakan tkinter export to excel

Ini dapat dilakukan menggunakan script berikut:

multiple_cells = sheet['A1':'B3']
for row in multiple_cells:
    for cell in row:
        print cell.value

Dalam hal ini, kamu akan mendapatkan output berikut:

Name
Profession
Abder
Student
Bob
Engineer

Mengakses Semua Baris dan Kolom

OpenPyXL membolehkanmu untuk mengakses semua baris dan kolom dalam dokumen Excel, menggunakan metode rows() dan columns(), secara berturut-turut.

Untuk mengakses semua baris, kita dapat melakukan sebagai berikut:

all_rows = sheet.rows
print all_rows[:]

Perhatikan bahwa kita menggunakan notasi [:] untuk mengakses semua baris. Ini karena jenis obyek yang dikembalikan dari whole_document adalah tuple.

Output dari script di atas akan menjadi seperti berikut:

((<Cell Sheet1.A1>, <Cell Sheet1.B1>), (<Cell Sheet1.A2>, <Cell Sheet1.B2>), (<Cell Sheet1.A3>, <Cell Sheet1.B3>), (<Cell Sheet1.A4>, <Cell Sheet1.B4>), (<Cell Sheet1.A5>, <Cell Sheet1.B5>), (<Cell Sheet1.A6>, <Cell Sheet1.B6>), (<Cell Sheet1.A7>, <Cell Sheet1.B7>))

Di sisi lain, jika kita ingin mengakses semua kolom, kita cukup melakukan sebagai berikut:

all_columns = sheet.columns
print all_columns[:]

Dalam hal ini, kamu akan mendapatkan output berikut:

((<Cell Sheet1.A1>, <Cell Sheet1.A2>, <Cell Sheet1.A3>, <Cell Sheet1.A4>, <Cell Sheet1.A5>, <Cell Sheet1.A6>, <Cell Sheet1.A7>), (<Cell Sheet1.B1>, <Cell Sheet1.B2>, <Cell Sheet1.B3>, <Cell Sheet1.B4>, <Cell Sheet1.B5>, <Cell Sheet1.B6>, <Cell Sheet1.B7>))

Tentu saja ada lebih banyak yang dapat kamu lakukan dengan dokumen Excel, seperti yang dapat kamu lihat dalam dokumentasi OpenPyXL.

Kesimpulan

Dari tutorial ini, kita telah menyadari bagaimana fleksibelnya untuk berkerja dengan dokumen Excel menggunakan Python. Ingat skenario yang disebutkan pada awal tutorial ini? Itu cukup berharga untuk dicoba sebagai project!