将数据从 Kivy Python 更新到 Excel

Posted

技术标签:

【中文标题】将数据从 Kivy Python 更新到 Excel【英文标题】:Updating Data from Kivy Python to Excel 【发布时间】:2021-06-15 11:51:48 【问题描述】:

我在更新要插入 Excel 的数据时遇到问题。起初,我创建了数据,它成功地工作而没有错误。在我想从 Kivy 插入新数据后,它不起作用。错误表示该过程被 PC 拒绝。我有观看教程,看来我的问题仍未解决。这是我的 VSCode 代码:

Window.size = (500, 500)

outWorkbook = xlsxwriter.Workbook("staff.xlsx") outSheet = outWorkbook.add_worksheet()

类菜单(屏幕): 通过

类输入(屏幕):

input1 = ObjectProperty(None)
input2 = ObjectProperty(None)
input3 = ObjectProperty(None)
input4 = ObjectProperty(None)
input5 = ObjectProperty(None)
input6 = ObjectProperty(None)

def clear(self):
    self.ids.inherent_input.text = ''
    self.ids.inherent2_input.text = ''
    self.ids.inherent3_input.text = ''
    self.ids.inherent4_input.text = ''
    self.ids.inherent5_input.text = ''
    self.ids.inherent6_input.text = ''

def btn(self):
    self.L = ()
    print("Name: " + self.input1.text,
        "Activity/Programme: " + self.input2.text,
        "Date: " + self.input3.text,
        "Place: " + self.input4.text,
        "Time from: " + self.input5.text,
        "Time to: " + self.input6.text)

    
    staff = ("Name": [str(self.input1.text)], "Program/Activity": [str(self.input2.text)], "Place" : [str(self.input3.text)], "Date": [str(self.input4.text)], "Time From" : [str(self.input5.text)], "Time To" : [str(self.input6.text)])
    self.L = pd.DataFrame(staff)

    self.input1.text = ''
    self.input2.text = ''
    self.input3.text = ''
    self.input4.text = ''
    self.input5.text = ''
    self.input6.text = ''

    print(self.L)
    with pd.ExcelWriter('staff.xlsx') as writer:
        self.L.to_excel(writer)

类信息(屏幕): 通过

类 WindowManager(ScreenManager): 通过

kv = Builder.load_file('window.kv')

类 MyLayout(Widget):

类 WindowApp(App): 定义构建(自我): 返回kv

如果 name == 'ma​​in': WindowApp().run()

这是我的 kv 文件:

WindowManager:
Menu:
Enter:
Info:
: 名称:“主菜单”
BoxLayout:
    orientation: "vertical"
    size: root.width, root.height

    padding: 10
    spacing: 15

    Button:
        id: enter
        text: "Enter"
        on_release: app.root.current = "enter"

    Button:
        id: info
        text: "Information"
        on_release: app.root.current = "info"

    Button:
        id: exit
        text: "Exit"
        on_press: quit()

: 名称:“输入”

input1: inherent_input
input2: inherent2_input
input3: inherent3_input
input4: inherent4_input
input5: inherent5_input
input6: inherent6_input

BoxLayout:
    orientation: "vertical"
    size: root.width, root.height

    padding:10
    spacing:10

    BoxLayout:
        spacing: 10

        Label:
            text: "Name"
            font_size: 20
        
        TextInput:
            id: inherent_input
            multiline: False

    BoxLayout:
        spacing: 10
        Label:
            text: "Activity/Programme"
            font_size: 20

        TextInput:
            id: inherent2_input
            multiline: False

    BoxLayout:
        spacing: 10
        Label:
            text: "Place"
            font_size: 20

        TextInput:
            id: inherent3_input
            multiline: False

    BoxLayout:

        Label:
            text: "Date"
            font_size: 20

        TextInput:
            id: inherent4_input
            multiline: False

    BoxLayout:
        padding: 10
        spacing: 10

        Label:
            text: "Time from"
            font_size: 20

        TextInput:
            id: inherent5_input
            multiline: False

        Label:
            text: "to"
            font_size: 20

        TextInput:
            id: inherent6_input
            multiline: False

    BoxLayout:

        padding: 15
        spacing: 15

        
        Button:
            id: clear
            text: "Clear"
            font_size: 12
            on_press: root.clear()

        Button:
            id: back
            text: "Back to Menu"
            font_size: 12
            on_release: app.root.current = "MainMenu"
            

        Button:
            id: submit
            text: "Submit"
            font_size: 12
            on_press: root.btn()

: 名称:“信息”

BoxLayout:
    orientation: 'vertical'
    
    padding: 15
    spacing: 15

    Label:
        id: information
        text: "This is just a test, an Alpha version of Prototype"
        font_size: 20
        bold: True
        italic: False
        outline_color: (0,0,0)

    Button:
        id: returnBack
        text: "Return"
        on_release: app.root.current = "MainMenu"

任何帮助将不胜感激。

【问题讨论】:

您收到的错误是什么? 这实际上不是编程错误,更像是用户管理错误,因为我没有更新数据,而是使用相同的名称保存数据。 错误:xlsxwriter.exceptions.FileCreateError:[Errno 13] 权限被拒绝:'文件路径' 【参考方案1】:

您遇到的错误可能意味着多种情况。

您是否要打开目录?

如果是这样,请不要这样做。它很可能会导致您提到的错误。

您尝试打开的文件是否在其他任何地方?

您可能需要关闭它,python 才能打开它。在尝试删除资源管理器中的文件时,您可能已经经历过这种情况,该文件在其他地方打开。 Windows 不会让你这样做。在尝试访问之前检查有问题的文件是否已打开。

【讨论】:

我打开文件没有问题,当我尝试用我想要实现的新数据更新 excel 时出现问题。当我使用 append 方法时,它也显示了相同的结果。 哦,好吧,现在我明白了,我必须关闭文件,然后再次运行系统才能更新。 我遇到了其他问题,如何在不覆盖以前数据的情况下更新 excel 表?有什么方法可以实现吗? 因此,您不想编辑原件,而是保存原件的编辑副本。我理解正确吗? 是的,就是这样,我想将数据保存到现有的excel文件中,而不覆盖之前保存的数据。

以上是关于将数据从 Kivy Python 更新到 Excel的主要内容,如果未能解决你的问题,请参考以下文章

Kivy,Python:更新标签 on_file_drop

Kivy ObjectProperty 更新标签文本

第一个 Python/Kivy/KivyMD 应用程序。无法将文本字段中的数据保存到变量 + 数据绑定到 MDList

Python kivy 更新不同屏幕中的标签文本

Python/Kivy:使用回车键将一个 TextInput 聚焦到另一个 TextInput

Python 2.7_初试连接Mysql查询数据导出到exce_20161216