Openpyxl 正在保存损坏的文件,android
Openpyxl saving currupted file ,android
我制作了一个 tkinter 代码来将员工保存到 xlsx 文件,该程序在我的电脑上运行,但是当我 运行 它在我的 phone 中使用 pydroid3 时,代码 运行没有问题,但文件已损坏且无法使用。
有人有想法吗?我认为问题在于 wb.save('file.xlsx')
以损坏的形式保存文件。
代码:
from _tkinter import *
import tkinter as tk
from openpyxl import load_workbook
from datetime import datetime
wb = load_workbook('file.xlsx')
sheet = wb.active
ht = 500
wt = 500
root = tk.Tk()
var = tk.StringVar()
var.set(datetime.date(datetime.now()))
def call():
n = 4
j = d.get() + " 00:00:00"
while True:
a1 = sheet.cell(row=n, column=2)
if j == str(a1.value):
break
n = n + 1
p1 = sheet.cell(row=n, column=3)
p1.value = e2.get()
c1 = sheet.cell(row=n, column=4)
c1.value = e6.get()
m1 = sheet.cell(row=n, column=5)
m1.value = e1.get()
E1 = sheet.cell(row=n, column=7)
E1.value = e4.get()
D1 = sheet.cell(row=n, column=8)
D1.value = e5.get()
a1 = sheet.cell(row=n, column=9)
a1.value = e3.get()
t1 = sheet.cell(row=n, column=11)
t1.value = e7.get()
f1 = sheet.cell(row=n, column=6)
f1.value = e8.get()
w = tk.Canvas(root, height= ht, width= wt)
w.pack()
frame= tk.Frame(root,bg='#3363F9')
frame.place(relwidth=1,relheight=1)
d = tk.Entry(frame,textvariable=var)
d.place(relx=0.6,rely=0.15)
# sc = tk.Label(frame,textvariable=var)
# sc.place(relx=0.4,rely=0.1)
s1 = tk.Label(frame,text="math")
s1.place(relx=0.15,rely=0.25)
e1 = tk.Entry(frame)
e1.place(relx=0.35,rely=0.25)
s2 = tk.Label(frame,text="physics")
s2.place(relx=0.15,rely=0.30)
e2 = tk.Entry(frame)
e2.place(relx=0.35,rely=0.30)
s3 = tk.Label(frame,text="arabic")
s3.place(relx=0.15,rely=0.35)
e3 = tk.Entry(frame)
e3.place(relx=0.35,rely=0.35)
s4 = tk.Label(frame,text="English")
s4.place(relx=0.15,rely=0.4)
e4 = tk.Entry(frame)
e4.place(relx=0.35,rely=0.4)
s5 = tk.Label(frame,text="German")
s5.place(relx=0.15,rely=0.45)
e5 = tk.Entry(frame)
e5.place(relx=0.35,rely=0.45)
s6 = tk.Label(frame,text="Chemistry")
s6.place(relx=0.15,rely=0.5)
e6 = tk.Entry(frame)
e6.place(relx=0.35,rely=0.5)
s7 = tk.Label(frame,text="transportion")
s7.place(relx=0.15,rely=0.55)
e7 = tk.Entry(frame)
e7.place(relx=0.35,rely=0.55)
s8 = tk.Label(frame,text="food")
s8.place(relx=0.15,rely=0.6)
e8 = tk.Entry(frame)
e8.place(relx=0.35,rely=0.6)
b = tk.Button(frame,text="get",command= lambda :call())
b.place(relx=0.75,rely=0.2)
root.mainloop()
wb.save('file.xlsx')
我已经稍微清理了您的代码并进行了测试。我这边没有腐败。如果有帮助,请告诉我。
1st 我们将所有标签名称存储在一个列表中。然后循环遍历该列表,我们使用索引和值来创建条目和标签小部件。我们使用索引来管理我们的网格。 place()
不适合小部件放置,因为如果您需要进行任何更改,您可能最终不得不重写任何一个地方以进行补偿。然后只需使用条目列表的正确索引更新单元格值。这里也不需要 canvas 。看来它只用于颜色。
示例:
import tkinter as tk
from datetime import datetime
from openpyxl import load_workbook
ht = 500
wt = 500
root = tk.Tk()
root.geometry('{}x{}'.format(ht, wt))
root.config(bg='#3363F9')
root.rowconfigure(0, weight=1)
root.rowconfigure(2, weight=1)
root.columnconfigure(0, weight=1)
root.columnconfigure(2, weight=1)
var = tk.StringVar()
var.set(datetime.date(datetime.now()))
def call():
n = 4
j = d.get() + " 00:00:00"
wb = load_workbook('file.xlsx')
sheet = wb.active
while True:
a1 = sheet.cell(row=n, column=2)
if j == str(a1.value):
break
n = n + 1
sheet.cell(row=n, column=3).value = entry_list[1].get()
sheet.cell(row=n, column=4).value = entry_list[5].get()
sheet.cell(row=n, column=5).value = entry_list[0].get()
sheet.cell(row=n, column=6).value = entry_list[7].get()
sheet.cell(row=n, column=7).value = entry_list[3].get()
sheet.cell(row=n, column=8).value = entry_list[4].get()
sheet.cell(row=n, column=9).value = entry_list[2].get()
sheet.cell(row=n, column=11).value = entry_list[6].get()
wb.save('file.xlsx')
frame = tk.Frame(root, bg='#3363F9')
frame.grid(row=1, column=1)
label_list = ["math", "physics", "arabic", "English", "German", "Chemistry", "transportation", "food"]
entry_list = []
for ndex, label in enumerate(label_list):
tk.Label(frame, text=label, bg='#3363F9', fg='white').grid(row=ndex+2, column=0, sticky='e')
entry_list.append(tk.Entry(frame))
entry_list[-1].grid(row=ndex+2, column=1)
d = tk.Entry(frame, textvariable=var)
d.grid(row=0, column=2)
tk.Button(frame, text="get", command=call).grid(row=1, column=2)
root.mainloop()
也就是说,如果您愿意更改 excel 文件中的某些列,我们可以进一步减少它。如果您要按顺序将列与标签匹配,那么您可以这样做:
def call():
n = 4
j = d.get() + " 00:00:00"
wb = load_workbook('file.xlsx')
sheet = wb.active
while True:
a1 = sheet.cell(row=n, column=2)
if j == str(a1.value):
break
n = n + 1
for i in range(8):
sheet.cell(row=n, column=i+3).value = entry_list[i].get()
wb.save('file.xlsx')
我制作了一个 tkinter 代码来将员工保存到 xlsx 文件,该程序在我的电脑上运行,但是当我 运行 它在我的 phone 中使用 pydroid3 时,代码 运行没有问题,但文件已损坏且无法使用。
有人有想法吗?我认为问题在于 wb.save('file.xlsx')
以损坏的形式保存文件。
代码:
from _tkinter import *
import tkinter as tk
from openpyxl import load_workbook
from datetime import datetime
wb = load_workbook('file.xlsx')
sheet = wb.active
ht = 500
wt = 500
root = tk.Tk()
var = tk.StringVar()
var.set(datetime.date(datetime.now()))
def call():
n = 4
j = d.get() + " 00:00:00"
while True:
a1 = sheet.cell(row=n, column=2)
if j == str(a1.value):
break
n = n + 1
p1 = sheet.cell(row=n, column=3)
p1.value = e2.get()
c1 = sheet.cell(row=n, column=4)
c1.value = e6.get()
m1 = sheet.cell(row=n, column=5)
m1.value = e1.get()
E1 = sheet.cell(row=n, column=7)
E1.value = e4.get()
D1 = sheet.cell(row=n, column=8)
D1.value = e5.get()
a1 = sheet.cell(row=n, column=9)
a1.value = e3.get()
t1 = sheet.cell(row=n, column=11)
t1.value = e7.get()
f1 = sheet.cell(row=n, column=6)
f1.value = e8.get()
w = tk.Canvas(root, height= ht, width= wt)
w.pack()
frame= tk.Frame(root,bg='#3363F9')
frame.place(relwidth=1,relheight=1)
d = tk.Entry(frame,textvariable=var)
d.place(relx=0.6,rely=0.15)
# sc = tk.Label(frame,textvariable=var)
# sc.place(relx=0.4,rely=0.1)
s1 = tk.Label(frame,text="math")
s1.place(relx=0.15,rely=0.25)
e1 = tk.Entry(frame)
e1.place(relx=0.35,rely=0.25)
s2 = tk.Label(frame,text="physics")
s2.place(relx=0.15,rely=0.30)
e2 = tk.Entry(frame)
e2.place(relx=0.35,rely=0.30)
s3 = tk.Label(frame,text="arabic")
s3.place(relx=0.15,rely=0.35)
e3 = tk.Entry(frame)
e3.place(relx=0.35,rely=0.35)
s4 = tk.Label(frame,text="English")
s4.place(relx=0.15,rely=0.4)
e4 = tk.Entry(frame)
e4.place(relx=0.35,rely=0.4)
s5 = tk.Label(frame,text="German")
s5.place(relx=0.15,rely=0.45)
e5 = tk.Entry(frame)
e5.place(relx=0.35,rely=0.45)
s6 = tk.Label(frame,text="Chemistry")
s6.place(relx=0.15,rely=0.5)
e6 = tk.Entry(frame)
e6.place(relx=0.35,rely=0.5)
s7 = tk.Label(frame,text="transportion")
s7.place(relx=0.15,rely=0.55)
e7 = tk.Entry(frame)
e7.place(relx=0.35,rely=0.55)
s8 = tk.Label(frame,text="food")
s8.place(relx=0.15,rely=0.6)
e8 = tk.Entry(frame)
e8.place(relx=0.35,rely=0.6)
b = tk.Button(frame,text="get",command= lambda :call())
b.place(relx=0.75,rely=0.2)
root.mainloop()
wb.save('file.xlsx')
我已经稍微清理了您的代码并进行了测试。我这边没有腐败。如果有帮助,请告诉我。
1st 我们将所有标签名称存储在一个列表中。然后循环遍历该列表,我们使用索引和值来创建条目和标签小部件。我们使用索引来管理我们的网格。 place()
不适合小部件放置,因为如果您需要进行任何更改,您可能最终不得不重写任何一个地方以进行补偿。然后只需使用条目列表的正确索引更新单元格值。这里也不需要 canvas 。看来它只用于颜色。
示例:
import tkinter as tk
from datetime import datetime
from openpyxl import load_workbook
ht = 500
wt = 500
root = tk.Tk()
root.geometry('{}x{}'.format(ht, wt))
root.config(bg='#3363F9')
root.rowconfigure(0, weight=1)
root.rowconfigure(2, weight=1)
root.columnconfigure(0, weight=1)
root.columnconfigure(2, weight=1)
var = tk.StringVar()
var.set(datetime.date(datetime.now()))
def call():
n = 4
j = d.get() + " 00:00:00"
wb = load_workbook('file.xlsx')
sheet = wb.active
while True:
a1 = sheet.cell(row=n, column=2)
if j == str(a1.value):
break
n = n + 1
sheet.cell(row=n, column=3).value = entry_list[1].get()
sheet.cell(row=n, column=4).value = entry_list[5].get()
sheet.cell(row=n, column=5).value = entry_list[0].get()
sheet.cell(row=n, column=6).value = entry_list[7].get()
sheet.cell(row=n, column=7).value = entry_list[3].get()
sheet.cell(row=n, column=8).value = entry_list[4].get()
sheet.cell(row=n, column=9).value = entry_list[2].get()
sheet.cell(row=n, column=11).value = entry_list[6].get()
wb.save('file.xlsx')
frame = tk.Frame(root, bg='#3363F9')
frame.grid(row=1, column=1)
label_list = ["math", "physics", "arabic", "English", "German", "Chemistry", "transportation", "food"]
entry_list = []
for ndex, label in enumerate(label_list):
tk.Label(frame, text=label, bg='#3363F9', fg='white').grid(row=ndex+2, column=0, sticky='e')
entry_list.append(tk.Entry(frame))
entry_list[-1].grid(row=ndex+2, column=1)
d = tk.Entry(frame, textvariable=var)
d.grid(row=0, column=2)
tk.Button(frame, text="get", command=call).grid(row=1, column=2)
root.mainloop()
也就是说,如果您愿意更改 excel 文件中的某些列,我们可以进一步减少它。如果您要按顺序将列与标签匹配,那么您可以这样做:
def call():
n = 4
j = d.get() + " 00:00:00"
wb = load_workbook('file.xlsx')
sheet = wb.active
while True:
a1 = sheet.cell(row=n, column=2)
if j == str(a1.value):
break
n = n + 1
for i in range(8):
sheet.cell(row=n, column=i+3).value = entry_list[i].get()
wb.save('file.xlsx')