栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python3+pandas+pyside2拆分Excel(工作表)到不同的工作簿(Workbook)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python3+pandas+pyside2拆分Excel(工作表)到不同的工作簿(Workbook)

背景:

公司运营部门需要将系统导出的数据(所有门店数据都在一个Sheet里)按门店(机构代码或机构名称)拆分到不同的Workbook(工作簿)文件里发给每个门店。

思路:

之前写过合并不同Workbook(工作簿)到一个Sheet(工作表)里,用python+pandas或python+xlwings,前者更好用,这次拆分就是它的逆向过程,所以在之前的基础上修改就好了。

先创建两个空文件夹一个存需拆分的源文件,一个存拆分好的结果文件,用pandas读取源文件,根据条件筛选出符合条件的数据,按门店(机构代码或机构名称)创建结果文件并保存,为方便没有编程知识的人使用,所有要借助pyside2加上操作界面,并打包成exe可执行程序。

代码:

split_excel.py  拆分excel的功能代码

import numpy as np
import pandas as pd 
import xlrd
import os
import xlwings as xw

def split_sheet(source_file,result_file,condition):

	# 需拆分文件存放的文件夹
	root_path = source_file

	# 拆分结果文件存放的文件夹
	save_path = result_file



	#显示所有列
	# pd.set_option('display.max_columns', None)
	# #显示所有行
	# pd.set_option('display.max_rows', None)
	# #设置value的显示长度为100,默认为50
	# pd.set_option('max_colwidth',100)   

	cont = os.listdir(root_path)
	print(cont)

	for i in range(0,len(cont)):

		# 获取需拆分文件夹路径
		root = root_path
		filename = os.path.join(root,cont[i])
		print(filename)

		df = pd.read_excel(filename,header = 0) # 读取  ,index_col = 0
		# 获取拆分依据
		df1 = df[condition]
		md = list(dict.fromkeys(list(df1)))

		# writer = pd.ExcelWriter(save_path)

		for x in md :
			# 创建保存文件路径
			save_file = os.path.join(save_path,str(x)+".xlsx")
			writer = pd.ExcelWriter(save_file)
			# 筛选
			df2 = df[df[condition]==str(x)]
			# 写入文件
			df2.to_excel(index = False , excel_writer=writer,sheet_name=str(x),startcol=0,startrow=0)
			# 保存结果
			writer.save()
			# writer.close()




	# 关闭

	writer.close()

easy.ui   用pyside2 的designer设计的操作界面文件



 MainWindow
 
  
   
    0
    0
    662
    516
   
  
  
   MainWindow
  
  
   
    
     
      240
      300
      151
      81
     
    
    
     开始处理
    
   
   
    
     
      160
      60
      331
      20
     
    
   
   
    
     
      160
      100
      331
      20
     
    
   
   
    
     
      160
      180
      141
      31
     
    
   
   
    
     
      70
      50
      191
      41
     
    
    
     源文件夹路径:
    
   
   
    
     
      60
      90
      161
      31
     
    
    
     结果文件夹路径:
    
   
   
    
     
      530
      60
      75
      23
     
    
    
     选择
    
   
   
    
     
      530
      100
      75
      23
     
    
    
     选择
    
   
   
    
     
      70
      160
      91
      71
     
    
    
     筛选条件标题:
    
   
  
  
   
    
     0
     0
     662
     23
    
   
  
  
 
 
 

pyside2_split_excel.py   将功能代码与操作界面关联起来

# # -*- coding: utf-8 -*-
from PySide2.QtWidgets import QApplication, QMessageBox,QFileDialog
from PySide2.QtUiTools import QUiLoader
import split_excel
from time import sleep
from threading import  Thread
class Stats:

    def __init__(self):
        # 从文件中加载UI定义

        # 从 UI 定义中动态 创建一个相应的窗口对象
        # 注意:里面的控件对象也成为窗口对象的属性了
        # 比如 self.ui.button , self.ui.textEdit
        self.ui = QUiLoader().load('./easy.ui')
        self.filePath = self.ui.pushButton_2.clicked.connect(self.send_signal1)
        self.filePath2 = self.ui.pushButton_3.clicked.connect(self.send_signal2)

        self.ui.pushButton.clicked.connect(self.satrt_split)



    def send_signal1(self):
        
        filePath = QFileDialog.getExistingDirectory(self.ui, "选择【源文件】存储路径")
        self.ui.lineEdit.setText(filePath)

    def send_signal2(self):
        
        filePath2 = QFileDialog.getExistingDirectory(self.ui, "选择【结果文件】存储路径")
        self.ui.lineEdit_2.setText(filePath2)
        
    def satrt_split(self):
        self.ui.pushButton.setEnabled(False)

        def workerThreadFunc():
            source_file = self.ui.lineEdit.text()
            result_file = self.ui.lineEdit_2.text()
            condition = self.ui.lineEdit_3.text()

            split_excel.split_sheet(source_file,result_file,condition)
            
            self.ui.pushButton.setEnabled(True)
        worker = Thread(target=workerThreadFunc)
        worker.start()
       

app = QApplication([])
stats = Stats()
stats.ui.show()
app.exec_()

拆分excel演示视频

打包好的程序已上传CSDN:

https://download.csdn.net/download/CSDN1120628290/84109186https://download.csdn.net/download/CSDN1120628290/84109186

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757280.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号