添加读取excel文件功能
This commit is contained in:
35
.gitignore
vendored
Normal file
35
.gitignore
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# --------------- 代码 ---------------
|
||||||
|
# 如果想把某目录下所有.py都放进去,就写 *.py 或 src/
|
||||||
|
|
||||||
|
# --------------- Python 环境 --------
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
*.pyd
|
||||||
|
*.so
|
||||||
|
*.egg
|
||||||
|
*.egg-info/
|
||||||
|
venv/
|
||||||
|
env/
|
||||||
|
.venv/
|
||||||
|
Pipfile.lock
|
||||||
|
poetry.lock
|
||||||
|
|
||||||
|
# --------------- IDE / 编辑器 --------
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
|
||||||
|
# --------------- Jupyter / 数据 -------
|
||||||
|
.ipynb_checkpoints/
|
||||||
|
*.ipynb
|
||||||
|
data/
|
||||||
|
*.csv
|
||||||
|
*.xlsx
|
||||||
|
*.json
|
||||||
|
|
||||||
|
# --------------- 系统文件 -------------
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
28
dynamic_load_widet.py
Normal file
28
dynamic_load_widet.py
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import sys
|
||||||
|
|
||||||
|
from PySide6.QtUiTools import QUiLoader
|
||||||
|
from PySide6.QtWidgets import QApplication, QLabel
|
||||||
|
|
||||||
|
|
||||||
|
class dynamic_load_widget():
|
||||||
|
def __init__(self):
|
||||||
|
super(dynamic_load_widget, self).__init__()
|
||||||
|
|
||||||
|
# 显示主窗口
|
||||||
|
self.ui = QUiLoader().load('ui/dynamic_load_widget.ui')
|
||||||
|
|
||||||
|
self.ui.add_widget_btn.clicked.connect(self.add_widget)
|
||||||
|
|
||||||
|
self.counter = 0
|
||||||
|
|
||||||
|
def add_widget(self):
|
||||||
|
print('add widget')
|
||||||
|
self.counter += 1
|
||||||
|
label = QLabel(f'我是第{self.counter}个动态label')
|
||||||
|
self.ui.verticalLayout.addWidget(label)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
app = QApplication(sys.argv)
|
||||||
|
main = dynamic_load_widget()
|
||||||
|
main.ui.show()
|
||||||
|
sys.exit(app.exec())
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
import sys
|
import sys
|
||||||
from PySide6 import QtCore, QtGui, QtWidgets
|
from PySide6 import QtCore, QtGui, QtWidgets
|
||||||
|
from PySide6.QtGui import QStandardItemModel, QStandardItem
|
||||||
from PySide6.QtUiTools import QUiLoader
|
from PySide6.QtUiTools import QUiLoader
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from PySide6.QtWidgets import QFileDialog, QMainWindow, QMessageBox, QLabel
|
from PySide6.QtWidgets import QFileDialog, QMainWindow, QMessageBox, QLabel, QComboBox, QVBoxLayout, QSizePolicy, \
|
||||||
|
QTableWidgetItem
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
class MainWindows(QMainWindow):
|
class MainWindows(QMainWindow):
|
||||||
@@ -34,18 +36,39 @@ class MainWindows(QMainWindow):
|
|||||||
#使用pandas读取EXCEL文件
|
#使用pandas读取EXCEL文件
|
||||||
try:
|
try:
|
||||||
# 读取第一行表头
|
# 读取第一行表头
|
||||||
df = pd.read_excel(file_path, nrows=0) # 不加载数据,只加载列名
|
df = pd.read_excel(file_path, nrows=10) # 不加载数据,只加载列名
|
||||||
headers = list(df.columns)
|
headers = list(df.columns)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
QMessageBox.critical(self,"错误",f"读取文件失败:\n{e}")
|
QMessageBox.critical(self,"错误",f"读取文件失败:\n{e}")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
# 2. 建 model
|
||||||
|
model = QStandardItemModel(self)
|
||||||
|
model.setRowCount(df.shape[0])
|
||||||
|
model.setColumnCount(df.shape[1])
|
||||||
|
model.setHorizontalHeaderLabels(df.columns)
|
||||||
|
# 3. 填单元格
|
||||||
|
for r, row in df.iterrows():
|
||||||
|
for c, val in enumerate(row):
|
||||||
|
model.setItem(r, c, QStandardItem(str(val)))
|
||||||
|
|
||||||
|
# 4. 挂到视图
|
||||||
|
self.ui.tableView.setModel(model)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#动态创建标签
|
#动态创建标签
|
||||||
|
print(headers)
|
||||||
for col in headers:
|
for col in headers:
|
||||||
|
# 生成每个LABEL标签的内容
|
||||||
lbl = QLabel(f"· {col}")
|
lbl = QLabel(f"· {col}")
|
||||||
self.ui.addWidget()
|
# 在窗体中的垂直布局内放置标签
|
||||||
|
self.ui.verticalLayout_2.addWidget(lbl)
|
||||||
|
|
||||||
|
self.ui.comboBox.addItems(headers)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
UI_FILE = "uv/main_window.ui"
|
|
||||||
app = QtWidgets.QApplication(sys.argv)
|
app = QtWidgets.QApplication(sys.argv)
|
||||||
# 设置应用程序样式
|
# 设置应用程序样式
|
||||||
app.setStyle("Fusion")
|
app.setStyle("Fusion")
|
||||||
|
|||||||
6
pyproject.toml
Normal file
6
pyproject.toml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[project]
|
||||||
|
name = "excelsplit"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "Add your description here"
|
||||||
|
requires-python = ">=3.13"
|
||||||
|
dependencies = []
|
||||||
43
ui/dynamic_load_widget.ui
Normal file
43
ui/dynamic_load_widget.ui
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>Form</class>
|
||||||
|
<widget class="QWidget" name="Form">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>835</width>
|
||||||
|
<height>492</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QPushButton" name="add_widget_btn">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>660</x>
|
||||||
|
<y>120</y>
|
||||||
|
<width>75</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>添加控件</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="verticalLayoutWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>120</x>
|
||||||
|
<y>100</y>
|
||||||
|
<width>411</width>
|
||||||
|
<height>211</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout"/>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>878</width>
|
<width>878</width>
|
||||||
<height>432</height>
|
<height>692</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
@@ -72,6 +72,57 @@
|
|||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QComboBox" name="comboBox">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>590</x>
|
||||||
|
<y>410</y>
|
||||||
|
<width>69</width>
|
||||||
|
<height>22</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" name="pushButton">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>700</x>
|
||||||
|
<y>410</y>
|
||||||
|
<width>121</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>生成单个EXCEL文件</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QScrollArea" name="scrollArea">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>40</x>
|
||||||
|
<y>410</y>
|
||||||
|
<width>181</width>
|
||||||
|
<height>261</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="widgetResizable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>179</width>
|
||||||
|
<height>259</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections/>
|
<connections/>
|
||||||
|
|||||||
Reference in New Issue
Block a user