84 lines
2.4 KiB
Python
Executable File
84 lines
2.4 KiB
Python
Executable File
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_())
|
|
|