简体   繁体   English

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

[英]I use python openpyxl for working with for loop in excel

Ihave data that has a special structure.我有具有特殊结构的数据。 The data is grouped as shown at the screenshot.数据按屏幕截图所示进行分组。 Data structure数据结构

Using python, I determined the data outline levels, and I want to set this information about the levels in the cells for each row, in a new column, for example, column=8.使用 python,我确定了数据大纲级别,并且我想在新列中设置有关每行单元格中级别的信息,例如 column=8。 I use code我使用代码

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')

But I get traceback但我得到回溯

Traceback (most recent call last): File "C:/Users/lisit/PycharmProjects/File_parsing/test_loop.py", line 11, in ws.cell(row=row_index,column=8).value=ws.row_dimensions[row_index].outline_level File "C:\Users\lisit\Python\lib\site-packages\openpyxl\worksheet\worksheet.py", line 236, in cell raise ValueError("Row or column values must be at least 1") ValueError: Row or column values must be at least 1回溯(最后一次调用):文件“C:/Users/lisit/PycharmProjects/File_parsing/test_loop.py”,第 11 行,在 ws.cell(row=row_index,column=8).value=ws.row_dimensions[row_index ].outline_level 文件“C:\Users\lisit\Python\lib\site-packages\openpyxl\worksheet\worksheet.py”,第 236 行,单元格中引发 ValueError("行或列值必须至少为 1") ValueError : 行或列值必须至少为 1

Can you please help me to fix it?你能帮我修一下吗?

Issue问题

row_index starts at 0 (enumerate default behavior) 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)):

Two Options to fix修复的两个选项

Either: Use row_index + 1任一:使用 row_index + 1

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

Or, set default start parameter to 1, ie enumerate(..., start = 1)或者,将默认启动参数设置为 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):

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM