决定写这篇文章是因为有朋友问“如何用Python根据数据源自动生成数据透视表”。这道题背后有一个很好的解决办法,让代码为我们做重复的工作,从而减少工作量,减少错误。Python开发的小工具,其实就是把Python程序打包成一个exe,分享后就可以使用了。即使电脑没有Python环境,也可以使用。使用代码提高工作效率,尽量减少加班。内容大纲明确需求:自动生成数据透视表【这部分可以由你的重复工作代替】安装三方依赖库:tkinter和pyinstaller代码实现:包括Python生成数据透视表和桌面GUI两部分联动设计并打包Python程序生成exe。执行文件解决exe文件可能过大的问题:安装虚拟环境1.需求背景工作中的重复操作会使用suppliername,month,三个字段生成想要的pivottable格式和存储量。2、安装三方依赖库创建桌面窗口。这里我们使用tkinter,它是Python自带的一个GUI库。安装后即可使用。pipinstalltkinter使用pyinsatller将程序打包成exe。好处是不需要把代码部署到服务器上,直接把打包好的exe发给对方,就可以直接使用了。对这种小巧轻便的功能非常友好。pip安装pyinstaller3.代码实现Excel文件生成数据透视表和过滤数据,文件名:excel_to_pivot.pyimportpandasaspdimportnumpyasnpclassExcelToPivot(object):def__init__(self,filename,file_path):self.file_name=filenameself.file_path=file_path"""Excel的自动数据透视表函数返回数据透视结果"""defexcel_Pivot(self):print(self.file_path)data=pd.read_excel(self.file_path)data_pivot_table=pd.pivot_table(data,index=['SupplierName','Month'],values=["IncomingAmount"],aggfunc=np.sum)returndata_pivot_table"""按条件筛选并保存"""defselect_data(self,name,month):data_pivot_table=self.excel_Pivot()data_new=data_pivot_table.query('供应商名称==["{}"]&month=={}'.format(name,month))data_new.to_excel('{}.xlsx'.format(str(self.file_name).split('.')[0]))return'筛选完成!'if__name__=='__main__':filename=input("请输入文件名:")path='C:/Users/cherich/Desktop/'+filenamepros=ExcelToPivot(filename,path)print(pross.select_data("C",4))设计桌面窗口函数,文件名:opration.pyfromtkinterimportTk,Entry,Button,mainloopimporttkinter.filedialogimportexcel_to_pivotfromtkinterimportmessageboxfromtkinterimportttkdefUpload():globalfilename,data_pivot_tabletry:filename=tkinter.filedialog.askopenfilename(title='SelectFile')pross=excel_to_pivot.ExcelToPivot(str(filename).split('/')[-1],filename)data_pivot_table=pross.excel_Pivot()messagebox.showinfo('Info','Conversionsucceeded!')除了Exceptionase:print(e)messagebox.showinfo('Info','Conversionfailed!')defselect(name,month):try:print('供应商名称==["{}"]&月份=={}'.format(name,month))data_new=data_pivot_table.query('供应商名称==["{}"]&月份=={}'.format(name,month))data_new.to_excel('{}.xlsx'.format(str(filename).split('.')[0]))messagebox.showinfo('Info','过滤完成并生成文件!')root.destroy()除了Exceptionase:print(e)messagebox.showinfo('Info','Filterfailed!')root=Tk()root.config(background="#6fb765")root.title('Automaticpivottablegadget')root.geometry('500x250')e1=条目(根,宽度=30)e1.grid(行=2,列=0)btn1=按钮(根,文本='上传文件',命令=上传)。网格(行=2,列=10,pady=5)box1=ttk.Combobox(root)#使用grid()控制控件的位置box1.grid(row=5,sticky="NW")#设置下拉菜单中的值box1['value']=('A','B','C','D','Supplier')#通过current()设置下拉菜单选项的默认值box1.current(4)box2=ttk.Combobox(root)box2.grid(row=5,column=1,sticky="NW")box2['value']=(1,2,3,4,5,6,7,8,9,10,11,12,'月')box2.current(12)#写一个回调函数,绑定执行事件deffunc(event):globalb1,b2b1=box1.get()b2=box2.get()#绑定下拉菜单事件box1。bind("<
