import pandas as pd import os import sys from PyQt5 import QtWidgets, QtGui from PyQt5.QtWidgets import * import os class ui(QWidget): def __init__(self): super().__init__() self.fieldname = None self.filepath = None self.filePrompt = None self.prompt = None self.startBtn = None self.field = None self.file = None self.label = None self.initUI() def initUI(self): self.setWindowTitle("分表") self.file = QTextEdit() self.filePrompt = QLabel("请把文件拖到下面的框里") self.prompt = QLabel('填写要分的字段') self.field = QTextEdit() self.startBtn = QPushButton('开始') self.startBtn.clicked.connect(self.splitTable) # 新建表格布局 vbox = QVBoxLayout() vbox.setSpacing(50) # 新增按钮到表格 vbox.addWidget(self.filePrompt) vbox.addWidget(self.file) vbox.addWidget(self.prompt) vbox.addWidget(self.field) vbox.addWidget(self.startBtn) # 绑定事件到按钮 self.setLayout(vbox) self.resize(500, 200) self.center() self.show() def center(self): # 获得窗口 qr = self.frameGeometry() # 获得屏幕中心点 cp = QDesktopWidget().availableGeometry().center() # 显示到屏幕中心 qr.moveCenter(cp) self.move(qr.topLeft()) def splitTable(self): self.filepath = self.file.toPlainText().replace("file://","") folderPath = os.path.dirname(self.filepath) outputPath = folderPath + '/分表结果' self.fieldname = self.field.toPlainText() print(self.filepath) df = pd.read_excel(self.filepath) groups = df.groupby(self.fieldname) group_names = list(groups.groups.keys()) # writer = pd.ExcelWriter('output_file.xlsx') for name in group_names: group_data = groups.get_group(name) with pd.ExcelWriter(f'{name}.xlsx') as writer: group_data.to_excel(writer, index=False) if not os.path.exists(outputPath): os.makedirs(outputPath) for name in group_names: os.replace(f'{name}.xlsx', outputPath + f'/{name}.xlsx') if __name__ == '__main__': app = QApplication(sys.argv) ui = ui() sys.exit(app.exec_())