我使用 python openpyxl 在 excel 中处理 for 循环

I use python openpyxl for working with for loop in excel

我有具有特殊结构的数据。数据分组如屏幕截图所示。 Data structure

使用 python,我确定了数据大纲级别,我想在新列中为每一行的单元格设置有关级别的信息,例如,column=8。 我用代码

import openpyxl as opx

wb=opx.load_workbook('./sources/example.xlsx')
print(wb.sheetnames)
ws=wb.active
print(ws.max_row)

for row_index, row in enumerate(ws.iter_rows(min_col=2, min_row=2, max_col=ws.max_column+1, max_row=ws.max_row+1)):
    ws.cell(row=row_index,column=8).value=ws.row_dimensions[row_index].outline_level
    print(row_index, ws.row_dimensions[row_index].outline_level)

 wb.save('./sources/test.xlsx')

但是我得到了回溯

回溯(最后一次调用): 文件 "C:/Users/lisit/PycharmProjects/File_parsing/test_loop.py",第 11 行,位于 ws.cell(行=row_index,列=8).value=ws.row_dimensions[row_index].outline_level 文件 "C:\Users\lisit\Python\lib\site-packages\openpyxl\worksheet\worksheet.py",第 236 行,在单元格中 提高 ValueError("Row or column values must be at least 1") ValueError:行或列值必须至少为 1

你能帮我解决一下吗?

问题

row_index 从 0 开始(枚举默认行为)

for row_index, row in enumerate(ws.iter_rows(min_col=2, min_row=2, max_col=ws.max_column+1, max_row=ws.max_row+1)):

两个修复选项

或者:使用 row_index + 1

ws.cell(row=row_index+1,column=8).value=ws.row_dimensions[row_index+1].outline_level

或者,将默认启动参数设置为 1,即 enumerate(..., start = 1)

for row_index, row in enumerate(ws.iter_rows(min_col=2, min_row=2, max_col=ws.max_column+1, max_row=ws.max_row+1), start = 1):