2021年11月1日 星期一

Python-Gui_tkinter_treeview(3),將修改的資料寫入Excel

 將修改好的資料寫入Excel及判斷,若已寫入跳出訊息視窗。



 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import openpyxl
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import time
#設定視窗。
window = tk.Tk()
#設定視窗標題。
window.title('Actitivy')
#設定視窗大小。
window.geometry('800x600')
#設定Treeview元件,顯示標題,顯示10列。
Treeview_1=ttk.Treeview(window,show='headings',height=10)
Treeview_1.grid(column=0, row=1,columnspan=20)

#設定Label標籤參數(bg背景顏色、font字型格式、width宽度15個字元、高度1個字元)
Label_1 = tk.Label(window,bg='yellow', text='請輸入編號:',font=('Arial', 12),width=15,height=1,padx=5)
#設定排版方式在第一排靠左。
Label_1.grid(column=0, row=0,sticky='w')

#設定Entry輸入方框參數(font字型格式、width宽度5個字元)
Entry_1 = tk.Entry(window, font=('Arial', 12),width=5)
#設定排版方式在第二排且離左邊框距離5。
Entry_1.grid(column=1, row=0,padx=5)

#Button按鈕事件。
def button_event():
#取得Entry元件的值。
Input_number=Entry_1.get()
#跑資料迴圈進行判斷和輸入值是否相同及資料最後一行判斷。
for D in range(1,len(D1_value)):
if D == len(D1_value):
break
#判斷編號等於輸入的值及第四欄有IN字樣,符合的話表示登記過。
if D1_value[D][0] == int(Input_number) and D1_value[D][3]=='IN':
#顯示已登記過。
Treeview_1.insert("",D,values=D1_value[D])
messagebox.showinfo("check finished", D1_value[D][4])
#判斷編號等於輸入的值及第四欄為空,表示未登記過。
elif D1_value[D][0] == int(Input_number) and D1_value[D][3]==None:
#Check IN欄轉成由空值轉成IN。
D1_value[D][3]='IN'
#使用Column行和row列方式寫入資料。
sheet.cell(column=4, row=D+1).value ='IN'
#Time欄位記錄時間。
Now_Time = time.localtime()
D1_value[D][4]=time.strftime("%Y%m%d %H:%M:%S",Now_Time)
#使用Excel位置寫入E+列。
sheet['E'+str(D+1)].value =time.strftime("%Y%m%d %H:%M:%S",Now_Time)
#寫入Excel
wb.save("D:\\Train\\name.xlsx")
#將資料寫入Treeview元件內。
Treeview_1.insert("",D,values=D1_value[D])
#清空Entry元件值。
Entry_1.delete(0,'end')
break

#設定Button按鈕及觸發事件button_event。
Button_1=tk.Button(window,text='送出', command=button_event)
#設定排版方式在第三排。
Button_1.grid(column=2,row=0)

#讀取EXCEL檔案。
wb = openpyxl.load_workbook("D:\\Train\\name.xlsx")
#讀取工作表1。
sheet = wb['工作表1']
#列的初始值。
x=0
#將資料轉成二維陣列。
D1_value=[[]]
while True:
D1_value.append([])
x=x+1
#當第列的第一個為空值時中斷。
if sheet.cell(row=x, column=1).value == None:
break
for y in range (0,5):
D1_value[x].append(sheet.cell(row=x, column=1+y).value)

#刪除二維陣列中前後值。
del D1_value[0]
del D1_value[len(D1_value)-1]

#設定列的標題。
Treeview_1["columns"]=D1_value[0]
#設定列的欄為寛120及顯示出標頭名稱。
for i in range(0,5):
Treeview_1.column(Treeview_1["columns"][i],width=120)
Treeview_1.heading(Treeview_1["columns"][i],text=Treeview_1["columns"][i])


結果:



沒有留言:

張貼留言

Ubuntu-Journalctl查看系統日誌

 近期所使用Ubuntu系統24小時開著,進行跑Python程式使用,但跑個2~3天,排程就無法正常寄信,SSH連線也無法正常連線,經查看後為wifi連線問題,暫先使用腳本排程進行重開wifi。 以下為記錄Journalctl指令。 使用Journalctl來從系統日誌上查看看問...