如何用openpyxl写一个循环,允许我在下面复制一个范围多次(看照片)



我在金融部门工作,对Python很陌生。我想用openpyxl做一个循环,它在同一列中复制单元格内容B2:B15。最好是多次,直到第184行。我已经完成了下面的循环,它可以工作,但只复制值B2而不复制值B2:B15。

for row in range(16,184):
for col in range(1,2):
char = get_column_letter(col)
ws[char + str(row)] = ws(['B2'].value)

我将让你看一下我的Excel屏幕来理解我正在尝试做什么。ExcelScreen非常感谢

你可以通过几个简单的步骤进入。

  1. 导入库:

    进口openpyxl以pd方式导入pandas

  2. 将excel加载到变量

    wb = openpyxl.load_workbook("c://…//yourfile.xlsx")

  3. 从excel中选择工作表

    sh = w .active

  4. 创建空列表

    list = []

  5. 循环读取所需单元格

    for I in range(2,16):Res = sh.cell(row= 1,column=2).valuelist.append (res)

  6. (奖金步骤)。将列表转换为数据帧

    pd。DataFrame (list, columns = ['desired_column_name'])

说"谢谢"是值得赞赏的,但这并不能回答问题。相反,投票给对你帮助最大的答案!如果这些答案对你有帮助,请考虑用一种更有建设性的方式来表达感谢——对你的同行在这里提出的问题给出你自己的答案。

有两种方法可以做到这一点。使用"编程"接口ws.iter_rows()意味着你只需要传递行号或列号。

第一个方法就是使用offset方法:
for row in ws.iter_rows(min_col=2, max_col=2, min_row=2, max_row=15):
cell = row[0]
offset = cell.offest(rows=14)
offset.value = cell.value

您可以为此构建一个循环,每次递增偏移量。

或者,您可以同时循环两个循环:

src = ws.iter_rows(min_col=2, max_col=2, min_row=2, max_row=15)
target = ws.iter_rows(min_col=2, max_col=2, min_row=16, max_row=29)
for r1, r2 in zip(src, target):
for c1, c2 in zip(r1, r2):
c2.value = c1.value

同样,你可以为这个创建一个循环

或者,如果您只想重复这些值11次:

src = ws.iter_rows(min_col=2, max_col=2, min_row=2, max_row=15, values_only=True)
src = [row[0] for row in src] * 11
for r1, r2 in zip(src, ws.iter_rows(min_col=2, max_col=2, min_row=16, max_row=184)):
r2[0].value = r1

最新更新