凊风 发表于 2024-4-2 10:29:48

FishC 发表于 2024-4-2 10:28
当然可以!以下是修改后的代码示例:import osfrom PySide6.QtWidgets import QApplication, QMainWind ...

回复请注意Python格式

FishC 发表于 2024-4-2 10:30:07

凊风 发表于 2024-04-02 10:29
回复请注意Python格式

抱歉,下面是修改后的代码示例,符合Python的PEP 8格式规范:

import os
from PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidget, QFileDialog
from PySide6.QtCore import Qt, QThread, Signal


class TextEditThread(QThread):
    text_changed = Signal(str)
   
    def __init__(self, file_path):
      super().__init__()
      self.file_path = file_path
   
    def run(self):
      if not os.path.isfile(self.file_path):
            self.text_changed.emit("文件不存在!")
            return
      
      base_name = os.path.basename(self.file_path)
      file_ext = os.path.splitext(base_name)
      
      if file_ext != '.txt':
            self.text_changed.emit("请选择txt格式的文件!")
            return
      
      with open(self.file_path, "r") as f:
            content = f.read()
            self.text_changed.emit(content)


class MainWindow(QMainWindow):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("Text Editor")
      
      self.text_edit = QTextEdit()
      self.open_button = QPushButton("Open")
      self.save_button = QPushButton("Save")
      
      self.open_button.clicked.connect(self.open_file)
      self.save_button.clicked.connect(self.save_file)
      
      layout = QVBoxLayout()
      layout.addWidget(self.text_edit)
      layout.addWidget(self.open_button)
      layout.addWidget(self.save_button)
      
      central_widget = QWidget()
      central_widget.setLayout(layout)
      self.setCentralWidget(central_widget)
   
    def open_file(self):
      file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "*.txt")
      
      if file_path:
            self.thread = TextEditThread(file_path)
            self.thread.text_changed.connect(self.update_text)
            self.thread.start()
   
    def update_text(self, content):
      self.text_edit.setPlainText(content)
   
    def save_file(self):
      file_path, _ = QFileDialog.getSaveFileName(self, "Save File", "", "*.txt")
      
      if file_path:
            with open(file_path, "w") as f:
                content = self.text_edit.toPlainText()
                f.write(content)


app = QApplication()
window = MainWindow()
window.text_edit.setPlainText("sheet1行1:\nsheet1列1:\nsheet1行2:\nsheet1列2:\n")
window.show()
app.exec()

希望这次的回答满足你的需求。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-2 10:33:33

FishC 发表于 2024-4-2 10:30
抱歉,下面是修改后的代码示例,符合Python的PEP 8格式规范:




用户录入后保存时,默认路径请指向file_Path,文件名请默认为”123.txt"

FishC 发表于 2024-4-2 10:33:54

凊风 发表于 2024-04-02 10:33
用户录入后保存时,默认路径请指向file_Path,文件名请 ...

好的,根据你的要求,下面是修改后的代码示例:import osfrom PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidget, QFileDialogfrom PySide6.QtCore import Qt, QThread, Signalclass TextEditThread(QThread):    text_changed = Signal(str)      def __init__(self, file_path):      super().__init__()      self.file_path = file_path      def run(self):      if not os.path.isfile(self.file_path):            self.text_changed.emit("文件不存在!")            return                base_name = os.path.basename(self.file_path)      file_ext = os.path.splitext(base_name)                if file_ext != '.txt':            self.text_changed.emit("请选择txt格式的文件!")            return                with open(self.file_path, "r") as f:            content = f.read()            self.text_changed.emit(content)class MainWindow(QMainWindow):    def __init__(self):      super().__init__()      self.setWindowTitle("Text Editor")                self.text_edit = QTextEdit()      self.open_button = QPushButton("Open")      self.save_button = QPushButton("Save")                self.open_button.clicked.connect(self.open_file)      self.save_button.clicked.connect(self.save_file)                layout = QVBoxLayout()      layout.addWidget(self.text_edit)      layout.addWidget(self.open_button)      layout.addWidget(self.save_button)                central_widget = QWidget()      central_widget.setLayout(layout)      self.setCentralWidget(central_widget)      def open_file(self):      file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "*.txt")                if file_path:            self.thread = TextEditThread(file_path)            self.thread.text_changed.connect(self.update_text)            self.thread.start()      def update_text(self, content):      self.text_edit.setPlainText(content)      def save_file(self):      default_path = os.path.dirname(self.thread.file_path)      default_file_name = "123.txt"      file_path, _ = QFileDialog.getSaveFileName(self, "Save File", os.path.join(default_path, default_file_name), "*.txt")                if file_path:            with open(file_path, "w") as f:                content = self.text_edit.toPlainText()                f.write(content)app = QApplication()window = MainWindow()window.text_edit.setPlainText("sheet1行1:\nsheet1列1:\nsheet1行2:\nsheet1列2:\n")window.show()app.exec()这次的代码会在保存文件时,默认打开一个文件保存对话框,其中默认路径为`file_Path`,文件名为`123.txt`。希望这次的回答能够满足你的需求。如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-2 10:34:35

FishC 发表于 2024-4-2 10:33
好的,根据你的要求,下面是修改后的代码示例:import osfrom PySide6.QtWidgets import QApplication, ...

回复请注意Python格式

FishC 发表于 2024-4-2 10:34:59

凊风 发表于 2024-04-02 10:34
回复请注意Python格式

抱歉,上方回答的代码没有按照Python的正确格式进行缩进。以下是按照Python格式缩进的示例代码:

import os
from PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidget, QFileDialog
from PySide6.QtCore import Qt, QThread, Signal

class TextEditThread(QThread):
    text_changed = Signal(str)

    def __init__(self, file_path):
      super().__init__()
      self.file_path = file_path

    def run(self):
      if not os.path.isfile(self.file_path):
            self.text_changed.emit("文件不存在!")
            return

      base_name = os.path.basename(self.file_path)
      file_ext = os.path.splitext(base_name)

      if file_ext != '.txt':
            self.text_changed.emit("请选择txt格式的文件!")
            return

      with open(self.file_path, "r") as f:
            content = f.read()
            self.text_changed.emit(content)

class MainWindow(QMainWindow):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("Text Editor")

      self.text_edit = QTextEdit()
      self.open_button = QPushButton("Open")
      self.save_button = QPushButton("Save")

      self.open_button.clicked.connect(self.open_file)
      self.save_button.clicked.connect(self.save_file)

      layout = QVBoxLayout()
      layout.addWidget(self.text_edit)
      layout.addWidget(self.open_button)
      layout.addWidget(self.save_button)

      central_widget = QWidget()
      central_widget.setLayout(layout)
      self.setCentralWidget(central_widget)

    def open_file(self):
      file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "*.txt")

      if file_path:
            self.thread = TextEditThread(file_path)
            self.thread.text_changed.connect(self.update_text)
            self.thread.start()

    def update_text(self, content):
      self.text_edit.setPlainText(content)

    def save_file(self):
      default_path = os.path.dirname(self.thread.file_path)
      default_file_name = "123.txt"
      file_path, _ = QFileDialog.getSaveFileName(self, "Save File", os.path.join(default_path, default_file_name), "*.txt")

      if file_path:
            with open(file_path, "w") as f:
                content = self.text_edit.toPlainText()
                f.write(content)

app = QApplication()
window = MainWindow()
window.text_edit.setPlainText("sheet1行1:\nsheet1列1:\nsheet1行2:\nsheet1列2:\n")
window.show()
app.exec()

非常抱歉给您带来困惑,这次的代码已经按照Python的格式进行了缩进。如有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-2 10:39:34

FishC 发表于 2024-4-2 10:34
抱歉,上方回答的代码没有按照Python的正确格式进行缩进。以下是按照Python格式缩进的示例代码:




这个self.text_edit = QTextEdit()大小、位置和字体、颜色能指定不?

FishC 发表于 2024-4-2 10:39:46

凊风 发表于 2024-04-02 10:39
这个self.text_edit = QTextEdit()大小、位置和字体、 ...

是的,你可以使用QTextEdit类的方法和属性来指定文本编辑框的大小、位置、字体和颜色。以下是一个示例代码,展示了如何设置这些属性:

from PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidget
from PySide6.QtCore import Qt

class MainWindow(QMainWindow):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("Text Editor")

      self.text_edit = QTextEdit()
      self.text_edit.setGeometry(50, 50, 300, 200)# 设置大小和位置
      self.text_edit.setFontPointSize(12)# 设置字体大小
      self.text_edit.setStyleSheet("color: red;")# 设置文本颜色

      self.open_button = QPushButton("Open")
      layout = QVBoxLayout()
      layout.addWidget(self.text_edit)
      layout.addWidget(self.open_button)

      central_widget = QWidget()
      central_widget.setLayout(layout)
      self.setCentralWidget(central_widget)

app = QApplication()
window = MainWindow()
window.show()
app.exec()

在这个例子中,我们通过调用`setGeometry()`方法设置了文本编辑框的大小和位置。然后,使用`setFontPointSize()`方法设置字体的大小,并使用`setStyleSheet()`方法设置文本的颜色。你可以根据需要修改这些值来自定义文本编辑框的外观。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-2 10:42:35

FishC 发表于 2024-4-2 10:39
是的,你可以使用QTextEdit类的方法和属性来指定文本编辑框的大小、位置、字体和颜色。以下是一个示例 ...

这一段:

self.setWindowTitle("Text Editor")

      self.text_edit = QTextEdit()
      self.text_edit.setGeometry(50, 50, 300, 200)# 设置大小和位置
      self.text_edit.setFontPointSize(12)# 设置字体大小
      self.text_edit.setStyleSheet("color: red;")# 设置文本颜色

      self.open_button = QPushButton("Open")
      layout = QVBoxLayout()
      layout.addWidget(self.text_edit)
      layout.addWidget(self.open_button)

      central_widget = QWidget()
      central_widget.setLayout(layout)
      self.setCentralWidget(central_widget)

能不能定义成一个函数让我调用它?

FishC 发表于 2024-4-2 10:42:48

凊风 发表于 2024-04-02 10:42
这一段:

self.setWindowTitle("Text Editor")

...

当然可以将这段代码封装成一个函数,供你在需要的时候调用。以下是一个示例:from PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidgetfrom PySide6.QtCore import Qtdef create_text_editor():    window = QMainWindow()    window.setWindowTitle("Text Editor")    text_edit = QTextEdit()    text_edit.setGeometry(50, 50, 300, 200)# 设置大小和位置    text_edit.setFontPointSize(12)# 设置字体大小    text_edit.setStyleSheet("color: red;")# 设置文本颜色    open_button = QPushButton("Open")    layout = QVBoxLayout()    layout.addWidget(text_edit)    layout.addWidget(open_button)    central_widget = QWidget()    central_widget.setLayout(layout)    window.setCentralWidget(central_widget)    return windowapp = QApplication()window = create_text_editor()window.show()app.exec()在这个例子中,我定义了一个名为`create_text_editor()`的函数,用于创建并返回一个包含文本编辑框的主窗口对象。你可以在需要时调用此函数,来获取带有自定义属性的文本编辑器窗口。注意,在创建窗口之后,你仍然需要调用`window.show()`和`app.exec()`来显示窗口并启动应用程序的事件循环。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-2 10:43:16

FishC 发表于 2024-4-2 10:42
当然可以将这段代码封装成一个函数,供你在需要的时候调用。以下是一个示例:from PySide6.QtWidgets i ...

回复请注意Python格式

FishC 发表于 2024-4-2 10:43:26

凊风 发表于 2024-04-02 10:43
回复请注意Python格式

非常抱歉,下面是符合Python格式的代码:from PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidget
from PySide6.QtCore import Qt

def create_text_editor():
    window = QMainWindow()
    window.setWindowTitle("Text Editor")
    text_edit = QTextEdit()
    text_edit.setGeometry(50, 50, 300, 200)# 设置大小和位置
    text_edit.setFontPointSize(12)# 设置字体大小
    text_edit.setStyleSheet("color: red;")# 设置文本颜色
    open_button = QPushButton("Open")
    layout = QVBoxLayout()
    layout.addWidget(text_edit)
    layout.addWidget(open_button)
    central_widget = QWidget()
    central_widget.setLayout(layout)
    window.setCentralWidget(central_widget)
    return window

app = QApplication()
window = create_text_editor()
window.show()
app.exec()
在这个例子中,我使用了正确的Python代码格式,包括正确的缩进、注释并按照PEP 8风格进行了代码布局。希望这次满足你的要求,如果还有其他问题,请随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-2 10:50:06

FishC 发表于 2024-4-2 10:43
非常抱歉,下面是符合Python格式的代码:
在这个例子中,我使用了正确的Python代码格式,包括正确的缩 ...

能不能把这函数和import os
from PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidget, QFileDialog
from PySide6.QtCore import Qt, QThread, Signal

class TextEditThread(QThread):
    text_changed = Signal(str)

    def __init__(self, file_path):
      super().__init__()
      self.file_path = file_path

    def run(self):
      if not os.path.isfile(self.file_path):
            self.text_changed.emit("文件不存在!")
            return

      base_name = os.path.basename(self.file_path)
      file_ext = os.path.splitext(base_name)

      if file_ext != '.txt':
            self.text_changed.emit("请选择txt格式的文件!")
            return

      with open(self.file_path, "r") as f:
            content = f.read()
            self.text_changed.emit(content)

class MainWindow(QMainWindow):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("Text Editor")

      self.text_edit = QTextEdit()
      self.open_button = QPushButton("Open")
      self.save_button = QPushButton("Save")

      self.open_button.clicked.connect(self.open_file)
      self.save_button.clicked.connect(self.save_file)

      layout = QVBoxLayout()
      layout.addWidget(self.text_edit)
      layout.addWidget(self.open_button)
      layout.addWidget(self.save_button)

      central_widget = QWidget()
      central_widget.setLayout(layout)
      self.setCentralWidget(central_widget)

    def open_file(self):
      file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "*.txt")

      if file_path:
            self.thread = TextEditThread(file_path)
            self.thread.text_changed.connect(self.update_text)
            self.thread.start()

    def update_text(self, content):
      self.text_edit.setPlainText(content)

    def save_file(self):
      default_path = os.path.dirname(self.thread.file_path)
      default_file_name = "123.txt"
      file_path, _ = QFileDialog.getSaveFileName(self, "Save File", os.path.join(default_path, default_file_name), "*.txt")

      if file_path:
            with open(file_path, "w") as f:
                content = self.text_edit.toPlainText()
                f.write(content)

app = QApplication()
window = MainWindow()
window.text_edit.setPlainText("sheet1行1:\nsheet1列1:\nsheet1行2:\nsheet1列2:\n")
window.show()
app.exec()

整合成一段代码?

FishC 发表于 2024-4-2 10:50:26

凊风 发表于 2024-04-02 10:50
能不能把这函数和import os
from PySide6.QtWidgets...

当然可以!下面是整合后的代码:import osfrom PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidget, QFileDialogfrom PySide6.QtCore import Qt, QThread, Signalclass TextEditThread(QThread):    text_changed = Signal(str)    def __init__(self, file_path):      super().__init__()      self.file_path = file_path    def run(self):      if not os.path.isfile(self.file_path):            self.text_changed.emit("文件不存在!")            return      base_name = os.path.basename(self.file_path)      file_ext = os.path.splitext(base_name)      if file_ext != '.txt':            self.text_changed.emit("请选择txt格式的文件!")            return      with open(self.file_path, "r") as f:            content = f.read()            self.text_changed.emit(content)class MainWindow(QMainWindow):    def __init__(self):      super().__init__()      self.setWindowTitle("Text Editor")      self.text_edit = QTextEdit()      self.open_button = QPushButton("Open")      self.save_button = QPushButton("Save")      self.open_button.clicked.connect(self.open_file)      self.save_button.clicked.connect(self.save_file)      layout = QVBoxLayout()      layout.addWidget(self.text_edit)      layout.addWidget(self.open_button)      layout.addWidget(self.save_button)      central_widget = QWidget()      central_widget.setLayout(layout)      self.setCentralWidget(central_widget)    def open_file(self):      file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "*.txt")      if file_path:            self.thread = TextEditThread(file_path)            self.thread.text_changed.connect(self.update_text)            self.thread.start()    def update_text(self, content):      self.text_edit.setPlainText(content)    def save_file(self):      default_path = os.path.dirname(self.thread.file_path)      default_file_name = "123.txt"      file_path, _ = QFileDialog.getSaveFileName(self, "Save File", os.path.join(default_path, default_file_name), "*.txt")      if file_path:            with open(file_path, "w") as f:                content = self.text_edit.toPlainText()                f.write(content)if __name__ == "__main__":    app = QApplication([])    window = MainWindow()    window.text_edit.setPlainText("sheet1行1:\nsheet1列1:\nsheet1行2:\nsheet1列2:\n")    window.show()    app.exec()这个代码整合了你之前提供的函数和import语句,并添加了一个if条件来判断是否直接运行脚本。最后,我在`if __name__ == "__main__":`块中创建了应用程序对象并运行主窗口。为了方便测试,我也设置了一个默认文本内容。注意,这段代码应保存在以.py为扩展名的Python文件中,并在命令行或集成开发环境中运行。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-2 10:51:00

FishC 发表于 2024-4-2 10:50
当然可以!下面是整合后的代码:import osfrom PySide6.QtWidgets import QApplication, QMainWindow,...

回复请注意Python格式

FishC 发表于 2024-4-2 10:51:25

凊风 发表于 2024-04-02 10:51
回复请注意Python格式

不好意思,下面是符合Python格式的代码:

import os
from PySide6.QtWidgets import QApplication, QMainWindow, QTextEdit, QPushButton, QVBoxLayout, QWidget, QFileDialog
from PySide6.QtCore import Qt, QThread, Signal

class TextEditThread(QThread):
    text_changed = Signal(str)

    def __init__(self, file_path):
      super().__init__()
      self.file_path = file_path

    def run(self):
      if not os.path.isfile(self.file_path):
            self.text_changed.emit("文件不存在!")
            return

      base_name = os.path.basename(self.file_path)
      file_ext = os.path.splitext(base_name)
      
      if file_ext != '.txt':
            self.text_changed.emit("请选择txt格式的文件!")
            return

      with open(self.file_path, "r") as f:
            content = f.read()
            self.text_changed.emit(content)

class MainWindow(QMainWindow):
    def __init__(self):
      super().__init__()
      self.setWindowTitle("Text Editor")

      self.text_edit = QTextEdit()
      self.open_button = QPushButton("Open")
      self.save_button = QPushButton("Save")

      self.open_button.clicked.connect(self.open_file)
      self.save_button.clicked.connect(self.save_file)

      layout = QVBoxLayout()
      layout.addWidget(self.text_edit)
      layout.addWidget(self.open_button)
      layout.addWidget(self.save_button)

      central_widget = QWidget()
      central_widget.setLayout(layout)
      self.setCentralWidget(central_widget)

    def open_file(self):
      file_path, _ = QFileDialog.getOpenFileName(self, "Open File", "", "*.txt")
      
      if file_path:
            self.thread = TextEditThread(file_path)
            self.thread.text_changed.connect(self.update_text)
            self.thread.start()

    def update_text(self, content):
      self.text_edit.setPlainText(content)

    def save_file(self):
      default_path = os.path.dirname(self.thread.file_path)
      default_file_name = "123.txt"
      file_path, _ = QFileDialog.getSaveFileName(self, "Save File", os.path.join(default_path, default_file_name), "*.txt")

      if file_path:
            with open(file_path, "w") as f:
                content = self.text_edit.toPlainText()
                f.write(content)

if __name__ == "__main__":
    app = QApplication()
    window = MainWindow()
    window.text_edit.setPlainText("sheet1行1:\nsheet1列1:\nsheet1行2:\nsheet1列2:\n")
    window.show()
    app.exec()
我已经修复了代码缩进和空格的问题,现在符合Python的标准格式要求了。希望这样更易读和理解!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-2 11:42:09

FishC 发表于 2024-4-2 08:57
当然可以使用PySide6来实现你的需求。下面是一个简单的示例代码:




这一段: # 创建文本文件并写入数据
            with open("123.txt", "w") as f:
                for sheet_name in sheet_List:
                  sheet = xls_File
                  row_1 = sheet.cell_value(0, 0)
                  col_1 = sheet.cell_value(2, 0)
                  row_2 = sheet.cell_value(4, 0)
                  col_2 = sheet.cell_value(6, 0)
                  f.write(f"{sheet_name}行1: {row_1}\n")
                  f.write(f"{sheet_name}列1: {col_1}\n")
                  f.write(f"{sheet_name}行2: {row_2}\n")
                  f.write(f"{sheet_name}列2: {col_2}\n")

如果sheet_List中有i个 sheet_name,又要如何实现呢?

FishC 发表于 2024-4-2 11:42:26

凊风 发表于 2024-04-02 11:42
这一段: # 创建文本文件并写入数据
            wit ...

如果`sheet_List`中有多个`sheet_name`,可以使用循环或列表推导来遍历并处理每个`sheet_name`。以下是修改后的代码段:

# 创建文本文件并写入数据
with open("123.txt", "w") as f:
    for sheet_name in sheet_List:
      sheet = xls_File# 获取当前sheet
      row_1 = sheet.cell_value(0, 0)
      col_1 = sheet.cell_value(2, 0)
      row_2 = sheet.cell_value(4, 0)
      col_2 = sheet.cell_value(6, 0)
      f.write(f"{sheet_name}行1: {row_1}\n")
      f.write(f"{sheet_name}列1: {col_1}\n")
      f.write(f"{sheet_name}行2: {row_2}\n")
      f.write(f"{sheet_name}列2: {col_2}\n")

# 或者使用列表推导
with open("123.txt", "w") as f:
    .cell_value(0, 0)}\n"
             f"{sheet_name}列1: {xls_File.cell_value(2, 0)}\n"
             f"{sheet_name}行2: {xls_File.cell_value(4, 0)}\n"
             f"{sheet_name}列2: {xls_File.cell_value(6, 0)}\n") for sheet_name in sheet_List]

这样无论有多少个`sheet_name`,都可以依次处理并将相应的数据写入到文本文件中。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

凊风 发表于 2024-4-3 22:14:50

FishC 发表于 2024-4-2 11:42
如果`sheet_List`中有多个`sheet_name`,可以使用循环或列表推导来遍历并处理每个`sheet_name`。以下是 ...

现有PySide6代码如下:
def data_summary(self, data_summary):
      ### 找到需累加数据的工作簿
      for file in self.File_List:
            file_path = os.path.join(self.File_Path, file)
            if file.endswith('.xls') and file != self.Base_Workbook and file != '汇总表.xls':
                Source_workbook = xlrd.open_workbook(file_path, formatting_info=True)
                file_path2 = os.path.join(self.File_Path, '汇总表.xls')
                Target_workbook = xlrd.open_workbook(file_path2, formatting_info=True)

             elif file.endswith('.xlsx') and file != self.Base_Workbook and file != '汇总表.xlsx':
               Source_workbook = load_workbook(file_path, formatting_info=True)
               file_path2 = os.path.join(self.File_Path, '汇总表.xlsx')
               Target_workbook = load_workbook(file_path2, formatting_info=True)

                # 遍历源簿中sheet
                for sheet_name in Source_workbook.sheet_names():
                  self.print_with_color02('999sheet_name:', sheet_name, 'yellow', 'red')
                  self.plainTextEdit.ensureCursorVisible()
                  ## 读取目标簿sheet_name工作表
                  ws_target = Target_workbook.sheet_by_name(sheet_name)
                  # 判断目标簿是否存在同名sheet
                  if sheet_name in Target_workbook.sheet_names():
                        # 复制目标工作簿
                        wb_target = copy(Target_workbook)
                        # 读取源工作簿下的sheet_name工作表
                        Temp_sheet = wb_target.get_sheet(sheet_name)                     
                     

                        SourceSheet = Source_workbook.sheet_by_name(sheet_name)
                        Rows = SourceSheet.nrows
                        Cols = SourceSheet.ncols                     
                        

                     
                        ### 应用行(列)排除规则
                        for row_num in range(Rows):
                            if row_num not in exclude_rows:
                              row_add = row_num
                              for col_num in range(Cols):
                                    if col_num not in exclude_cols:
                                        col_add = col_num
                                        ### 获取目标文件中指定单元格的值
                                        value1 = ws_target.cell(row_add, col_add).value                                       

                                        ### 获取源文件中指定单元格的值
                                        value2 = SourceSheet.cell(row_add, col_add).value
                                       
                                        ### 判断俩单元格值的类型并相加
                                        if isinstance(value1, (int, float)) and isinstance(value2, (int, float)):
                                          # 如果两个值都是数值类型
                                          value1 = value1 + value2
                                        elif isinstance(value1, (int, float)) or isinstance(value2, (int, float)):
                                          # 如果只有一个值是数值类型
                                          if isinstance(value1, (int, float)):
                                                value1 = value1
                                          else:
                                                value1 = value2
                                        else:
                                          # 如果两个值都不是数值类型
                                          value1 = ' '
                                        ### 更新目标文件中指定单元格的值
                                        Temp_sheet.write(row_add, col_add, value1)

                                       
                        ###保存目标文件
                        # wb_target.save('汇总表.xls')
                        wb_target.save(self.File_Path + '/汇总表.xls')
                        # if self.File_Type == 'xls':
                        #   wb_target.save(self.File_Path + '/汇总表.xls')
                        # elif self.File_Type == 'xlsx':
                        #   wb_target.save(self.File_Path + '/汇总表.xlsx')

                        self.print_with_color5('成功累加工作簿《', file, '》之<', sheet_name, '>(工作表)数据到《汇总表》中',
                                             'yellow', 'blue', 'yellow', 'blue', 'yellow')
                        self.plainTextEdit.ensureCursorVisible()
                  else:
                        # print(f'累加表格出错:无法打开目标文件或sheet错误')
                        self.print_with_color1('累加表格出错:无法打开目标文件或sheet错误', 'red')
                        self.plainTextEdit.ensureCursorVisible()

      # print('所有待统计工作簿数据已成功累加到汇总表!')
      

      return self.data_summary

请问为什么第2个sheet的数据能够累加到汇总表中也能保存后查询得到;

但第1个sheet虽然有累加动作,但结果却没能保存下来(累加后查询汇总表的第1个sheet中单元格数据没有变化)

FishC 发表于 2024-4-3 22:15:17

凊风 发表于 2024-04-03 22:14
现有PySide6代码如下:
def data_summary(self, data ...

根据您提供的代码,可以看到在处理第一个sheet时,使用了`copy(Target_workbook)`来创建目标工作簿的副本,并在副本上进行数据操作和保存。这个方法对于xlsx文件是有效的,但对于xls文件可能没有生效。

对于xls文件,对工作簿进行复制需要使用`xlutils.copy`模块中的`copy()`方法。所以,在处理第一个sheet时,您可以尝试使用以下代码:= xlutils.copy.copy(Target_workbook)
然后再进行数据操作和保存。这样应该就能够正确地累加并保存第一个sheet的数据到汇总表中。

修改后的代码如下:
# 复制目标工作簿
wb_target = xlutils.copy.copy(Target_workbook)
# 读取源工作簿下的sheet_name工作表
Temp_sheet = wb_target.get_sheet(sheet_name)

SourceSheet = Source_workbook.sheet_by_name(sheet_name)
Rows = SourceSheet.nrows
Cols = SourceSheet.ncols

# 应用行(列)排除规则
for row_num in range(Rows):
    if row_num not in exclude_rows:
      row_add = row_num
      for col_num in range(Cols):
            if col_num not in exclude_cols:
                col_add = col_num
               
                # 获取目标文件中指定单元格的值
                value1 = ws_target.cell(row_add, col_add).value
                # 获取源文件中指定单元格的值
                value2 = SourceSheet.cell(row_add, col_add).value

                # 判断俩单元格值的类型并相加
                if isinstance(value1, (int, float)) and isinstance(value2, (int, float)):
                  value1 = value1 + value2
                elif isinstance(value1, (int, float)) or isinstance(value2, (int, float)):
                  if isinstance(value1, (int, float)):
                        value1 = value1
                  else:
                        value1 = value2
                else:
                  value1 = ' '

                # 更新目标文件中指定单元格的值
                Temp_sheet.write(row_add, col_add, value1)

# 保存目标文件
wb_target.save(self.File_Path + '/汇总表.xls')

通过使用`xlutils.copy.copy()`方法,应该能够正确地复制目标工作簿并保存累加后的数据。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: 1 [2] 3
查看完整版本: Txt求教~~