import sys
import pandas as pd
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QFileDialog, QLabel, QLineEdit, QPushButton, QTableWidget, QTableWidgetItem
class ExcelProcessingApp(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
# 创建布局
layout = QVBoxLayout()
# 文件选择控件
self.file_label = QLabel('选择Excel文件:')
self.file_edit = QLineEdit()
self.file_button = QPushButton('浏览')
self.file_button.clicked.connect(self.show_file_dialog)
layout.addWidget(self.file_label)
layout.addWidget(self.file_edit)
layout.addWidget(self.file_button)
# 输入框:从第几行到第几行
self.range_label = QLabel('输入行范围(例如:1-10):')
self.range_edit = QLineEdit()
layout.addWidget(self.range_label)
layout.addWidget(self.range_edit)
# 确定按钮
self.confirm_button = QPushButton('确定')
self.confirm_button.clicked.connect(self.process_excel)
layout.addWidget(self.confirm_button)
# 显示Excel文件内容的控件
self.result_label = QLabel('Excel文件内容:')
self.result_table = QTableWidget()
layout.addWidget(self.result_label)
layout.addWidget(self.result_table)
# 设置主窗口布局
self.setLayout(layout)
# 设置主窗口属性
self.setWindowTitle('Excel处理工具')
self.setGeometry(300, 300, 600, 400)
def show_file_dialog(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
file_name, _ = QFileDialog.getOpenFileName(self, "选择Excel文件", "", "Excel 文件 (*.xlsx *.xls);;All Files (*)", options=options)
if file_name:
self.file_edit.setText(file_name)
def process_excel(self):
file_path = self.file_edit.text()
row_range = self.range_edit.text()
try:
if row_range:
start_row, end_row = map(int, row_range.split('-'))
if start_row >= 1 and end_row > start_row:
df = pd.read_excel(file_path, skiprows=range(1, start_row), nrows=end_row - start_row + 1)
else:
raise ValueError("行范围不正确")
else:
df = pd.read_excel(file_path)
self.display_table(df)
except Exception as e:
self.result_table.setRowCount(0)
self.result_table.setColumnCount(0)
self.result_label.setText(f"发生错误:{str(e)}")
def display_table(self, df):
# 清空表格
self.result_table.setRowCount(0)
self.result_table.setColumnCount(0)
# 设置表格行列数
self.result_table.setRowCount(df.shape[0])
self.result_table.setColumnCount(df.shape[1])
# 设置表头
self.result_table.setHorizontalHeaderLabels(df.columns.astype(str))
# 填充表格数据
for i, row in df.iterrows():
for j, value in enumerate(row):
item = QTableWidgetItem(str(value))
self.result_table.setItem(i, j, item)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = ExcelProcessingApp()
ex.show()
sys.exit(app.exec_())