决定写这篇文章是因为有朋友问“如何用Python根据数据源自动生成数据透视表”。这道题背后有一个很好的解决办法,让代码为我们做重复的工作,从而减少工作量,减少错误。Python开发的小工具,其实就是把Python程序打包成一个exe,分享后就可以使用了。即使电脑没有Python环境,也可以使用。使用代码提高工作效率,尽量减少加班。内容大纲明确需求:自动生成数据透视表【这部分可以由你重复工作代替】安装三方依赖库:tkinter和pyinstaller代码实现:包括Python生成数据透视表和桌面GUI联动设计打包Python程序两部分生成exe即可执行文件解决exe文件可能过大的问题:安装虚拟环境需要后台在工作中进行重复操作,使用供应商名称、月份、入库三个字段总计生成所需的数据透视表格式。安装三方依赖库创建桌面窗口。这里我们使用tkinter,它是Python自带的一个GUI库。安装后即可使用。pipinstalltkinter使用pyinsatller将程序打包成exe。好处是不需要把代码部署到服务器上,直接把打包好的exe发给对方,就可以直接使用了。对这种小巧轻便的功能非常友好。pipinstallpyinstaller代码实现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=["receivedamount"],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():全局文件名,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!')除了异常为e:print(e)messagebox.showinfo('Info','Conversionfailed!')defselect(name,month):try:print('供应商名称==["{}"]&month=={}'.format(name,month))data_new=data_pivot_table.query('供应商名称==["{}"]&month=={}'.format(name,month))data_new.to_excel('{}.xlsx'.format(str(filename).split('.')[0]))messagebox.showinfo('Info','筛选完成,生成文件!')root.destroy()exceptException作为e:print(e)messagebox.showinfo('Info','Filterfailed!')root=Tk()root.config(background="#6fb765")root.title('Autopivottablewidget')root.geometry('500x250')e1=Entry(root,width=30)e1.grid(row=2,column=0)btn1=Button(root,text='Uploadfile',command=Upload).grid(row=2,column=10,pady=5)box1=ttk.Combobox(root)#使用grid()控制控件box1.grid(row=5,sticky="NW")#设置drop-downmenuThevalueofbox1['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,'month')box2.current(12)#写一个回调函数,绑定执行事件deffunc(event):globalb1,b2b1=box1.get()b2=box2.get()#绑定下拉菜单事件box1.bind("<
