首页 > 解决方案 > 如何将相同的值追加到列中,直到达到最大行?

问题描述

我正在尝试将一个新值传递给从 B2 开始并循环到 Max Row 的 B 列。

import openpyxl
import os

# Finds current directoryhow
current_path = os.getcwd()
print(current_path)

# Changes directory
os.chdir('C:\\Users\\satwood\\Documents\\Example')

# prints new current directory
new_path = os.getcwd()
print(new_path)

# load workbooks
wb = openpyxl.load_workbook('example.xlsx')
type(wb)

# load worksheets
ws1 = wb.active

# append column B with cell_example

cell_example = ['success one']

max = ws1.max_row

for row, entry in enumerate(cell_example, start=1):
    ws1.cell(row=row + max, column=1, value=entry)

wb.save('example.xlsx')

这段代码的输出是: 无 无 无 无 无 无 ...

标签: pythonopenpyxl

解决方案


你的代码没有做你期望它做的事情。您正在迭代cell_example哪个是只有 1 个项目 ( 'success one') 的列表。您的循环运行一次, row 是相等的1+max_row并且 entrysuccess one是分配给 cell 的A{1+max_row}

请注意 B 列正在B使用ws['B{row}']2使用您在代码中使用它的方式。

如果您尝试将相同的值添加到max_rowB 列中的所有单元格,那么您只需将循环更改为:

for row in range(2, max_row):
    ws1.cell(row=row, column=2, value=cell_example[0])

但是,如果您希望遍历列表cell_example并将其分配给 B 列,那么您可以使用:

for row, entry in enumerate(cell_example, start=2):
    ws1.cell(row=row, column=2, value=entry)

这会将列表中的项目添加cell_example到从单元格 B2 开始的 B 列中。

请注意 stovfl 所说的内容,并指出迭代列中单元格的更好方法是使用:

for col_cells in worksheet.iter_cols(min_col=2, max_col=2):
    for cell in col_cells:
        cell.value = "Something"

正如他提到的这个答案中所述。


推荐阅读