Lambda66 2022-04-20 16:07 采纳率: 100%
浏览 44
已结题

关于 openpyxl + pyqt5按钮 自动办公录入 用户输入的数值无法迭代,如何解决?

问题遇到的现象和发生背景

项目首先用pyqt5制作了一个交互界面,并且赋予了pushbutton用于激活程序,数个lineEdit来获取需要写入Excel的数据。
需要写入的数据由用户决定从上到下输入几行,数据以字符串+数字组成,使用while循环希望实现数字的部分可被迭代,但始终只能输出最初用户键入的值。

问题相关代码,请勿粘贴截图

def writing():
first_title = ui.lineEdit_1.text()
prefix = ui.lineEdit_2.text()
iterative_number = ui.lineEdit_3.text()
executions_number = ui.lineEdit_4.text()
password = ui.lineEdit_5.text()
traversal = 0
traversal_column = sheet1.max_column
while traversal < int(executions_number) + 1:
iteration = int(iterative_number)
iterative_number_change = 0 + iteration
typing_value = str(prefix) + str(iterative_number_change)
traversal += 1
iterative_number_change += 1
account_writing = sheet1.cell(traversal, int(traversal_column))
account_writing.value = typing_value
print(iterative_number_change)
account_writing = sheet1.cell(1, int(traversal_column + 2))
first_title_2 = str(first_title)
account_writing.value = first_title_2
wb.save('test.xlsx')

if name == 'main':
import sys

app = RPSM.QApplication(sys.argv)
app.setStyle('Fusion')
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
ui.pushButton.clicked.connect(lambda: writing())
MainWindow.show()
sys.exit(app.exec_())
运行结果及报错内容

希望实现的换行和行输入都没有问题,但iterative_number_change并没有在预期中被迭代,始终保持最初键入的数值。

我的解答思路和尝试过的方法

我的基础十分的不扎实,最初甚至尝试了使用for循环,后来在意识到for循环存在的迭代器问题之后转用了while循环,暂时有想是否while嵌套能解决问题,不过感觉会变得更加复杂和代码量增加,所以还没有尝试,由于日常需求所以想要完成这个项目。

我想要达到的结果

解决代码typing_value的值iterative_number_change的数字无法迭代的问题,并大致能在用户点击pushbutton后如下向excel内录入数据。
prefix321
prefix322
prefix323
prefix324

  • 写回答

1条回答 默认 最新

  • A Python 萌新花花 2022-04-20 19:17
    关注

    iteration = int(iterative_number)
    iterative_number_change = 0 + iteration
    typing_value = str(prefix) + str(iterative_number_change)
    traversal += 1
    iterative_number_change += 1
    问题出在这几行上。你的iterative_number_change 一直都是定值。影响这个主要是这五行的第二行。它的值一直是定值,因为iteration没有变过。iteration一直是interative_number,而且iterative_number也是定值。这样一推理,你的这个number change就一直在while的一次循环开始的时候就变成了0+iteration,所以这个typingvale得到的这个值也是一样的。尽管后面iterative number change+=1了,但是在typing value之前有一个让他变成定值的语句。你只需要把我这里放的这五句 的前两句放到while循环之前就好

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月28日
  • 已采纳回答 4月20日
  • 创建了问题 4月20日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测