翼度科技»论坛 编程开发 python 查看内容

使用wxPython和pandas模块生成Excel文件的代码实现

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
介绍:

在Python编程中,有时我们需要根据特定的数据生成Excel文件。本文将介绍如何使用wxPython和pandas模块来实现这个目标。我们将创建一个简单的GUI应用程序,允许用户选择输出文件夹和输入的Excel文件,并根据Excel文件中每个单元格的字段名组合生成多个Excel文件。
C:\pythoncode\new\genxlsbyxls.py

1. 准备工作

在开始之前,确保您已经安装了wxPython和pandas模块。如果没有安装,可以使用以下命令进行安装:
  1. pip install wxPythonpip install pandas
复制代码
2. 创建GUI窗口

首先,我们需要创建一个GUI窗口,以便用户可以选择输出文件夹和输入的Excel文件。我们将使用wxPython模块来创建窗口和按钮,并将事件与相应的回调函数关联起来。
  1. import wx
  2. import os
  3. import pandas as pd

  4. class MyFrame(wx.Frame):
  5.     def __init__(self, parent, title):
  6.         super(MyFrame, self).__init__(parent, title=title, size=(400, 200))
  7.         
  8.         panel = wx.Panel(self)
  9.         
  10.         self.output_dir_btn = wx.Button(panel, label="选择输出文件夹")
  11.         self.Bind(wx.EVT_BUTTON, self.on_select_output_dir, self.output_dir_btn)
  12.         
  13.         self.input_file_btn = wx.Button(panel, label="选择Excel文件")
  14.         self.Bind(wx.EVT_BUTTON, self.on_select_input_file, self.input_file_btn)
  15.         
  16.         self.start_btn = wx.Button(panel, label="开始生成")
  17.         self.Bind(wx.EVT_BUTTON, self.on_start_generation, self.start_btn)
  18.         
  19.         sizer = wx.BoxSizer(wx.VERTICAL)
  20.         sizer.Add(self.output_dir_btn, 0, wx.ALL|wx.EXPAND, 5)
  21.         sizer.Add(self.input_file_btn, 0, wx.ALL|wx.EXPAND, 5)
  22.         sizer.Add(self.start_btn, 0, wx.ALL|wx.EXPAND, 5)
  23.         panel.SetSizer(sizer)
  24.         
  25.     def on_select_output_dir(self, event):
  26.         dlg = wx.DirDialog(self, "选择输出文件夹", style=wx.DD_DEFAULT_STYLE)
  27.         if dlg.ShowModal() == wx.ID_OK:
  28.             self.output_dir = dlg.GetPath()
  29.             print("输出文件夹:", self.output_dir)
  30.         dlg.Destroy()
  31.    
  32.     def on_select_input_file(self, event):
  33.         dlg = wx.FileDialog(self, "选择Excel文件", wildcard="Excel files (*.xlsx)|*.xlsx",
  34.                             style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
  35.         if dlg.ShowModal() == wx.ID_OK:
  36.             self.input_file = dlg.GetPath()
  37.             print("输入文件:", self.input_file)
  38.         dlg.Destroy()
  39.    
  40.     def on_start_generation(self, event):
  41.         if not hasattr(self, 'output_dir') or not hasattr(self, 'input_file'):
  42.             wx.MessageBox("请先选择输出文件夹和Excel文件", "错误", wx.OK | wx.ICON_ERROR)
  43.             return
  44.         
  45.         df = pd.read_excel(self.input_file)
  46.         
  47.         for i, col in enumerate(df.iloc[:, 0]):
  48.             column_names = col.split(',')
  49.             file_name = f"{i+1}.xlsx"
  50.             file_path = os.path.join(self.output_dir, file_name)
  51.             
  52.             df_new = pd.DataFrame(columns=column_names)
  53.             df_new.to_excel(file_path, index=False)
  54.         
  55.         wx.MessageBox("生成完成", "提示", wx.OK | wx.ICON_INFORMATION)
  56.         self.Close()

  57. app = wx.App()
  58. frame = MyFrame(None, "Excel文件生成器")
  59. frame.Show()
  60. app.MainLoop()```

  61. 在上述代码中,我们创建了一个`MyFrame`类,继承自wxPython的`Frame`类。该类表示我们的应用程序窗口,并包含了选择输出文件夹和选择Excel文件的按钮。

  62. **3. 实现回调函数**

  63. 接下来,我们需要实现与按钮关联的回调函数。这些函数将在用户点击相应的按钮时被调用。

  64. ```python
  65.     def on_select_output_dir(self, event):
  66.         dlg = wx.DirDialog(self, "选择输出文件夹", style=wx.DD_DEFAULT_STYLE)
  67.         if dlg.ShowModal() == wx.ID_OK:
  68.             self.output_dir = dlg.GetPath()
  69.             print("输出文件夹:", self.output_dir)
  70.         dlg.Destroy()
  71.    
  72.     def on_select_input_file(self, event):
  73.         dlg = wx.FileDialog(self, "选择Excel文件", wildcard="Excel files (*.xlsx)|*.xlsx",
  74.                             style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
  75.         if dlg.ShowModal() == wx.ID_OK:
  76.             self.input_file = dlg.GetPath()
  77.             print("输入文件:", self.input_file)
  78.         dlg.Destroy()
  79.    
  80.     def on_start_generation(self, event):
  81.         if not hasattr(self, 'output_dir') or not hasattr(self, 'input_file'):
  82.             wx.MessageBox("请先选择输出文件夹和Excel文件", "错误", wx.OK | wx.ICON_ERROR)
  83.             return
  84.         
  85.         df = pd.read_excel(self.input_file)
  86.         
  87.         for i, col in enumerate(df.iloc[:, 0]):
  88.             column_names = col.split(',')
  89.             file_name = f"{i+1}.xlsx"
  90.             file_path = os.path.join(self.output_dir, file_name)
  91.             
  92.             df_new = pd.DataFrame(columns=column_names)
  93.             df_new.to_excel(file_path, index=False)
  94.         
  95.         wx.MessageBox("生成完成", "提示", wx.OK | wx.ICON_INFORMATION)
  96.         self.Close()
复制代码
在上述代码中,
  1. on_select_output_dir
复制代码
函数用于选择输出文件夹,并将选择的路径存储在
  1. self.output_dir
复制代码
变量中。
  1. on_select_input_file
复制代码
函数类似地用于选择输入的Excel文件,并将选择的文件路径存储在
  1. self.input_file
复制代码
变量中。
  1. on_start_generation
复制代码
函数是最重要的回调函数。它首先读取选择的Excel文件,并逐个单元格解析字段名组合。然后,根据字段名组合创建新的DataFrame,并将其保存为一个新的Excel文件,文件名为序号加上
  1. .xlsx
复制代码
后缀。生成的Excel文件将保存在选择的输出文件夹中。

4. 运行应用程序

最后,我们需要创建一个
  1. wx.App
复制代码
对象并运行应用程序的主循环。
  1. app = wx.App()
  2. frame = MyFrame(None, "Excel文件生成器")
  3. frame.Show()
  4. app.MainLoop()
复制代码
这段代码创建了一个
  1. wx.App
复制代码
对象和一个
  1. MyFrame
复制代码
对象,并将应用程序的主循环交给
  1. app.MainLoop()
复制代码
处理。

5. 效果演示



现在,我们已经完成了整个程序的编写。运行程序后,将会出现一个GUI窗口,您可以通过点击按钮选择输出文件夹和输入的Excel文件。当您点击"开始生成"按钮后,程序将根据Excel文件中的字段名组合生成多个Excel文件,并保存在指定的输出文件夹中。
这个程序提供了一个简单而实用的方法来根据Excel文件中的字段名组合生成多个Excel文件。您可以根据自己的需求进行修改和扩展,以满足更复杂的场景。

总结:

本文介绍了如何使用wxPython和pandas模块创建一个简单的GUI应用程序,用于根据Excel文件中的字段名组合生成多个Excel文件。通过选择输出文件夹和输入的Excel文件,程序能够自动解析字段名组合,并生成对应的Excel文件。这种方法可以方便地处理大量数据,并将其保存为易于管理和使用的Excel文件。
以上就是使用wxPython和pandas模块生成Excel文件的代码实现的详细内容,更多关于wxPython pandas生成Excel的资料请关注脚本之家其它相关文章!

来源:https://www.jb51.net/python/3209717o3.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具