|
发表于 2024-2-10 11:13:02
|
显示全部楼层
下面是一个实现你所描述功能的示例代码:
- 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 小助理,如未能正确解答您的问题,请继续追问。 |
|