下面是一个实现你所描述功能的示例代码:
import sys
import os
import xlrd
import xlwt
from PySide6.QtWidgets import QApplication, QDialog, QVBoxLayout, QLabel, QComboBox, QPushButton, QMessageBox, QFileDialog
class MainDialog(QDialog):
def __init__(self):
super().__init__()
self.setWindowTitle("功能选择")
layout = QVBoxLayout()
folder_label = QLabel("请选择文件夹:")
self.folder_combo = QComboBox()
self.folder_combo.currentIndexChanged.connect(self.load_files)
layout.addWidget(folder_label)
layout.addWidget(self.folder_combo)
process_button = QPushButton("开始处理")
process_button.clicked.connect(self.process_files)
layout.addWidget(process_button)
self.setLayout(layout)
self.folder_combo.addItem("--- 请选择 ---")
self.base_workbook = None
def load_files(self, index):
if index == 0:
return
folder_path = self.folder_combo.currentText()
files = []
for file in os.listdir(folder_path):
if file.endswith(".xls"):
files.append(file)
self.base_workbook = None
if files:
self.folder_combo.setEnabled(False)
self.base_workbook = None
for file in files:
self.folder_combo.addItem(file)
def process_files(self):
if not self.base_workbook:
QMessageBox.warning(self, "错误", "请先选择基础工作簿!")
return
folder_path = self.folder_combo.currentText()
count = 0
for file in os.listdir(folder_path):
if file.endswith(".xls") and file != self.base_workbook:
workbook_path = os.path.join(folder_path, file)
try:
base_wb = xlrd.open_workbook(self.base_workbook, formatting_info=True)
wb = xlrd.open_workbook(workbook_path, formatting_info=True)
base_ws = base_wb.sheet_by_index(0)
ws = wb.sheet_by_index(0)
for row in range(0, ws.nrows):
for col in range(0, ws.ncols):
cell_value = ws.cell_value(row, col)
base_ws.write(row, col, cell_value)
count += 1
new_workbook_path = os.path.join(folder_path, "123.xls")
with open(new_workbook_path, "w") as f:
base_wb.save(f)
except Exception as e:
print(f"处理工作簿 {file} 出错:{str(e)}")
QMessageBox.information(self, "提示", f"累加成功的工作簿数目:{count}")
if __name__ == "__main__":
app = QApplication(sys.argv)
dialog = MainDialog()
dialog.folder_combo.addItems([f"{drive}:\" for drive in range(65, 91)]) # 添加所有盘符作为选项
if dialog.exec() == QDialog.Accepted:
print("处理完成!")
sys.exit(app.exec())
在这个示例中,我们创建了一个名为`MainDialog`的对话框类。界面包含一个下拉框用于选择文件夹,一个按钮用于开始处理操作。
当用户选择文件夹后,程序会列出该文件夹下所有扩展名为`.xls`的文件,并将其添加到下拉框中。
当用户点击开始处理按钮时,程序会遍历文件夹下的所有`.xls`文件(除了用于基础工作簿的文件),并逐一读取它们的内容。然后,将每个工作簿中的数据累加到基础工作簿中,在累加完成后,新的基础工作簿会保存为`123.xls`。
在累加操作完成后,程序会弹出一个提示框,显示成功累加的工作簿数量。
请注意,这只是一个简单的示例,并未处理异常情况(如文件不存在、无法读取等)。你可能需要根据实际情况进行必要的错误处理。
希望这个示例能帮助你实现所描述的功能!如果有任何问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |