我在金融部门工作,对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非常感谢
你可以通过几个简单的步骤进入。
-
导入库:
进口openpyxl以pd方式导入pandas
-
将excel加载到变量
wb = openpyxl.load_workbook("c://…//yourfile.xlsx")
-
从excel中选择工作表
sh = w .active
-
创建空列表
list = []
-
循环读取所需单元格
for I in range(2,16):Res = sh.cell(row= 1,column=2).valuelist.append (res)
-
(奖金步骤)。将列表转换为数据帧
pd。DataFrame (list, columns = ['desired_column_name'])
说"谢谢"是值得赞赏的,但这并不能回答问题。相反,投票给对你帮助最大的答案!如果这些答案对你有帮助,请考虑用一种更有建设性的方式来表达感谢——对你的同行在这里提出的问题给出你自己的答案。
有两种方法可以做到这一点。使用"编程"接口ws.iter_rows()
意味着你只需要传递行号或列号。
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