在使用 openpyxl 的 while 循环期间每次都无法在新行中写入列表

Having troubles to write list in a new row every time during while loop with openpyxl

每次代码循环时,我都遇到了将列表值插入新行的问题。 简而言之,我每次都需要代码,它循环将 lst 中的值每次写入单独的行。 我进行了广泛的研究以试图了解其工作原理并找到了大量示例,但不幸的是,我无法使代码按照这些示例工作。

这是代码:

    max_value = 5
    lst = []

    while True:
        wb = Workbook()
        ws = wb.active
        num = (max_value)
        for n in range(num):
            weight = float(input('Weight: '))
            lst.append(weight)
        ws.append(lst)

        if n+1 == max_value:
            wb.save(filename='path')

我试过在行 ws.append(lst) 之后添加 ws.insert_rows(idx=2, amount=1),如下所示:

    ...

    ws.insert_rows(idx=2, amount=1)
    ws.append(lst)

    if n+1 == max_value:
        wb.save(filename='path')

但它什么也没做,因为我想它需要一些东西来告诉代码在该行中写入下一个值。 我也试过这样的事情:

    ...
        
    next_avail_row = len(list(ws.rows))
    ws.append(lst)

    if n+1 == max_value
        wb.save(filename='path')

但在这里我也不确定如何告诉代码找到 next_avail_row = len(list(ws.rows)) 写入该行后。

想法?

编辑:

目前如果我在提示符下输入例如: 1,2,3,4,5

它输出:

如果我继续输入数字,例如: 7,6,5,4,3

它输出:

等等,我期望的是:

简而言之,每次调用该函数时,它都会写入同一个文件,但在下面一行。我希望这是一个明确的解释。

您的代码有几个问题。

首先,在您的 while 循环中。每次循环时,它都会调用 wb = Worbook() 并最终调用 wb.save(filename='path')。这每次都会创建一个新的 excel 工作表。假设在您的 wb.save() 调用中文件名每次都相同,那么每次您在新工作簿上调用保存时,它都会用相同的文件名覆盖之前创建的工作簿。

接下来,您的列表包含您输入的 weight 个值。您没有清除列表,因此每次您在循环中添加内容时,列表都会不断扩展。

此外,num = (max_value) 行实际上没有做任何事情,您还需要有某种条件才能跳出 while 循环。使用 while True 将使循环永远持续下去,除非你在某个时候打破它。

这里有一些代码可以按照您希望的方式执行此操作:

max_value = 5

line_count = 0

wb = Workbook()
ws = wb.active
white True:
   lst = []
   for n in range(max_value):
      weight = float(input('Weight: '))
      lst.append(weight)
   ws.append(lst)

   line_count += 1
   # an example condition to break out of the loop
   if line_count >= 5:
      break
   
wb.save(filename='path')

在这里,您的 Workbook 对象仅被创建和保存一次,因此它不会每次都打开一个新对象并覆盖之前的 Workbook。列表 lst 每次循环都会被清空,因此您的行将只与 max_value 中的值一样长。我还添加了一个打破 while True: 循环的示例方法。我设置的方式是,一旦你添加到工作簿中的行有 5 行,它就会跳出循环。你可以创建任何你想跳出循环的条件,这只是为了举例。