如何在 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')
这与问题无关,但我建议将代码分成方法以获取数据、转换数据然后将其保存到不同的文件.
我正在尝试使用 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')
这与问题无关,但我建议将代码分成方法以获取数据、转换数据然后将其保存到不同的文件.