如何在 Python 中使用 openpyxl 遍历每一行并同时插入行?

How do I iterate over every row and insert rows at the same time with openpyxl in Python?

我正在尝试使用 Openpyxl 和 iter_row() 遍历 excel 电子表格的每一行并获取每个单元格中的字符串,用逗号将它们拆分为值,添加行它找到的每个逗号,然后将拆分出的值插入到它们自己的 rows/cells.

脚本之前的示例有 运行 数据:
(152, 126), (14, 13)
(159, 144), (24, 43)

例如,单元格 A1 包含字符串 152、126,单元格 B2 具有 14... 单元格 A2 具有 159... 等等

脚本有 运行 数据后:
(152), (14)
(126), (13)
(159), (24)
(144), (43)

注意:我只是对第一列数据进行初始传递以添加行,然后我将开始将每个单元格的数据拆分到适当的 rows/columns。到目前为止,我未能添加行,我无法在第一组之后继续从行中添加它们……有什么想法吗?谢谢!

我尝试插入行的初始失败代码:

from openpyxl import load_workbook
workbook = load_workbook(filename="test.xlsx")

sheet = workbook.active

def insert_comma_rows():
    for idx, row in enumerate(sheet.iter_rows()):
        for cell in row:
            if cell.column == 1:
                curr_val = str(cell.value)
                comma_count = curr_val.count(",")
                if(comma_count > 0):
                    sheet.insert_rows(idx=(idx+2), amount=comma_count)

insert_comma_rows()

for row in sheet.iter_rows(values_only=True):
    print(row)

在第一个循环中 sheet.insert_rows(idx=(idx+2), amount=comma_count) 将添加一个空行,索引 (idx+2) 为 2,行数 curr_val.count(",") 为 1。

看起来您想添加数据而不是添加空白行。考虑使用 sheet.append() 并为每列传递一个值数组,例如 sheet.append(['col1', 'col2', col3')])

举个例子:

from openpyxl import load_workbook
workbook = load_workbook(filename="test.xlsx")
    
sheet = workbook.active
    
def insert_comma_rows():
    for idx, row in enumerate(sheet.iter_rows()):
        col1 = row[0].value.split(",")
        col2 = row[1].value.split(",")

        sheet.append([col1[0].strip(), col2[0].strip()]) # strip removes whitespaces.
        sheet.append([col1[1].strip(), col2[1].strip()])
        
insert_comma_rows()

for row in sheet.iter_rows(values_only=True):
    print(row)

输出:

('152, 126', '14, 13')
('159, 144', '24, 43')
('152', '14')
('126', '13')
('159', '24')
('144', '43')

这与问题无关,但我建议将代码分成方法以获取数据、转换数据然后将其保存到不同的文件.