8.在python中用data_only=True设置显示excel表格中公式的结果为None的解决方法

在用python调用excel文件显示带公式的表格内容,有两种显示结果:第一种是直接显示表格中公式人内容;另一种是显示其表格中公式的结果。

显示第一种,可以这样输入代码:

 

显示第二种,可以这样输入代码:

 

 

 由上图结果发现结果为None,出现该种情况主要是因为writeFormula.xlsx文件在用python创建时,是以data_only=False状态下打开,

最后用save()函数保存的(只需要将该excel文件打开,然后保存一下即可解决)。下图是重新保存后的运行结果。

 

 补充明:

在用python创建excel文件时,以data_only=True或默认data_only=False打开会得到两种不同的结果,用data_only=True状态下打开,如果最后用save()函数保存了,则原xlsx文件中,公式会被替换为常数结果或空值。而data_only=False状态下打开,最后用save()函数保存了的话,原xlsx文件也会只剩下data_only=False的那套值(即公式),另一套(data_only=True)的值会丢失,如想重新获得两套值,则仍旧需要用Excel程序打开该文件并保存。

转载于:https://www.cnblogs.com/ubuntu1987/p/11491727.html

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答这个问题。 首先,您需要创建一个类来继承QThread类,并在其重写run()方法来实现线程的功能。在run()方法,您可以使用PySerial库来读取串口发送的十六进制数据。 以下是一个简单的示例代码,可以帮助您了解如何在PyQt开启线程QThread,并在线程使用数组读取串口发送的十六进制数据。 ``` python import sys import serial from PyQt5.QtCore import QThread, pyqtSignal class SerialThread(QThread): data_received = pyqtSignal(bytes) def __init__(self, port, baud_rate): super().__init__() self.port = port self.baud_rate = baud_rate self.serial_port = None def run(self): self.serial_port = serial.Serial(self.port, self.baud_rate) while True: data = self.serial_port.read(1024) if data: self.data_received.emit(data) def stop(self): if self.serial_port: self.serial_port.close() class MainWindow(QMainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.serial_thread = None self.data_array = [] # UI初始化 self.init_ui() # 开始读取串口数据 self.start_serial_thread() def init_ui(self): # 界面初始化 # ... def start_serial_thread(self): self.serial_thread = SerialThread("COM1", 9600) self.serial_thread.data_received.connect(self.on_data_received) self.serial_thread.start() def stop_serial_thread(self): if self.serial_thread: self.serial_thread.stop() self.serial_thread.wait() self.serial_thread = None def on_data_received(self, data): # 将读取到的数据保存到数组 self.data_array.append(data) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 在上面的代码,SerialThread类继承了QThread类,并在run()方法使用PySerial库读取串口发送的数据。每当有数据读取时,会发出data_received信号,并将读取到的数据作为参数传递给槽函数on_data_received(),在该函数将读取到的数据保存到一个数组。 在MainWindow类,创建了一个SerialThread对象,并将data_received信号连接到槽函数on_data_received()。启动线程后,每当有数据读取时,都会将其保存到data_array数组。 请注意,由于QThread是一个线程类,因此当您在程序使用时,必须小心处理线程的生命周期,以避免内存泄漏和其他问题。在上面的示例代码,我们在MainWindow类的stop_serial_thread()方法关闭了线程,以确保线程安全地退出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值