Python Openpyxl保存当前文件,android

Python Openpyxl保存当前文件,android,python,tkinter,openpyxl,Python,Tkinter,Openpyxl,我制作了一个tkinter代码,将员工保存到xlsx文件中,该程序在我的计算机中运行,但当我使用pydroid3在手机中运行它时,代码运行没有问题,但该文件已损坏且无法工作 有人有主意吗?我认为问题在于wb.save('file.xlsx')正在以损坏的形式保存文件 代码: from\u tkinter导入* 将tkinter作为tk导入 从openpyxl导入加载工作簿 从日期时间导入日期时间 wb=load_工作簿('file.xlsx') 工作表=wb.active ht=500 重量=5

我制作了一个tkinter代码,将员工保存到xlsx文件中,该程序在我的计算机中运行,但当我使用pydroid3在手机中运行它时,代码运行没有问题,但该文件已损坏且无法工作

有人有主意吗?我认为问题在于
wb.save('file.xlsx')
正在以损坏的形式保存文件

代码:

from\u tkinter导入*
将tkinter作为tk导入
从openpyxl导入加载工作簿
从日期时间导入日期时间
wb=load_工作簿('file.xlsx')
工作表=wb.active
ht=500
重量=500
root=tk.tk()
var=tk.StringVar()
var.set(datetime.date(datetime.now()))
def call():
n=4
j=d.get()+“00:00:00”
尽管如此:
a1=表单元格(行=n,列=2)
如果j==str(a1.值):
打破
n=n+1
p1=板材单元(行=n,列=3)
p1.value=e2.get()
c1=表单元格(行=n,列=4)
c1.value=e6.get()
m1=表单元格(行=n,列=5)
m1.value=e1.get()
E1=表单元格(行=n,列=7)
E1.value=e4.get()
D1=表单元格(行=n,列=8)
D1.value=e5.get()
a1=表单元格(行=n,列=9)
a1.value=e3.get()
t1=表单元格(行=n,列=11)
t1.value=e7.get()
f1=图纸单元格(行=n,列=6)
f1.value=e8.get()
w=tk.Canvas(根,高度=ht,宽度=wt)
w、 包()
frame=tk.frame(根,bg='#3363F9')
帧位置(relwidth=1,relheight=1)
d=tk.Entry(frame,textvariable=var)
d、 位置(relx=0.6,rely=0.15)
#sc=tk.Label(frame,textvariable=var)
#sc.place(relx=0.4,rely=0.1)
s1=tk.Label(框架,text=“数学”)
s1.位置(relx=0.15,REL=0.25)
e1=tk.入口(框架)
e1.位置(relx=0.35,REL=0.25)
s2=tk.标签(框架,文本=“物理”)
s2.位置(relx=0.15,REL=0.30)
e2=传统条目(框架)
e2.位置(relx=0.35,rely=0.30)
s3=tk.标签(框架,text=“阿拉伯语”)
s3.地点(relx=0.15,REL=0.35)
e3=传统入口(框架)
e3.位置(relx=0.35,REL=0.35)
s4=传统标签(框架,text=“英语”)
s4.位置(relx=0.15,relx=0.4)
e4=传统条目(框架)
e4.地点(relx=0.35,rely=0.4)
s5=传统标签(框架,文本=“德语”)
s5.放置(relx=0.15,REL=0.45)
e5=传统入口(框架)
e5.位置(relx=0.35,REL=0.45)
s6=传统标签(框架,文本=“化学”)
s6.位置(relx=0.15,REL=0.5)
e6=传统入口(框架)
e6.位置(relx=0.35,REL=0.5)
s7=传统标签(框架,文本=“运输”)
s7.位置(relx=0.15,REL=0.55)
e7=传统入口(框架)
e7.位置(relx=0.35,rely=0.55)
s8=传统标签(框架,文本=“食品”)
s8.位置(relx=0.15,REL=0.6)
e8=传统入口(框架)
e8.位置(relx=0.35,rely=0.6)
b=tk.Button(frame,text=“get”,command=lambda:call())
b、 位置(relx=0.75,rely=0.2)
root.mainloop()
save('file.xlsx')

我已经清理了您的代码并进行了测试。我这边没有腐败。如果有帮助,请告诉我

首先,我们将所有标签名称存储在列表中。然后在该列表中循环,我们使用ndex和value来创建条目和标签小部件。我们使用ndex来管理网格
place()
对于小部件的放置不是很好,因为如果您需要进行任何更改,您可能最终不得不重写单个位置来进行补偿。然后简单地用条目列表的正确索引更新单元格值。这里也不需要画布。看起来它只是用来做颜色的

例如:

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')

哦,伙计,小部件创造的墙有点太多了。请查看
grid()
pack()
place()
几何体管理器通常不会像这样使用,我认为它真的不应该这样使用。您可以在循环中创建它们并将它们保存到列表中。也就是说,
wb.save('file.xlsx')
mainloop()之后。这一行代码只有在主循环终止后才会执行。这确实有效。谢谢你,我是python的初学者,这是我使用tkinter的第一个项目,问题是尽管我的代码很混乱,但我本应该在调用函数中放入wb.save('file.xlsx'),这很有效