【问题标题】:Copy column of cell values from one workbook to another with openpyxl使用 openpyxl 将单元格值列从一个工作簿复制到另一个工作簿
【发布时间】:2019-10-13 07:12:28
【问题描述】:

我正在从一个工作簿的列中提取数据,需要将数据复制到另一个现有工作簿。

这就是我提取数据的方式(工作正常):

wb2 = load_workbook('C:\\folder\\AllSitesOpen2.xlsx')
ws2 = wb2['report1570826222449']
#Extract column A from Open Sites
DateColumnA = []
for row in ws2.iter_rows(min_row=16, max_row=None, min_col=1, max_col=1):
    for cell in row:
        DateColumnA.append(cell.value)
DateColumnA

以上代码成功将第一列每一行的单元格值输出到DateColumnA

我想将存储在 DateColumnA 中的值粘贴到这个现有的目标工作簿:

#file to be pasted into
wb3 = load_workbook('C:\\folder\\output.xlsx')
ws3 = wb3['Sheet1']

但我在这里在概念上遗漏了一块。我无法连接这些点。有人可以建议我如何将这些数据从源工作簿中获取到新的目标工作簿中吗?

【问题讨论】:

标签: python python-3.x openpyxl


【解决方案1】:

假设您要复制从 wb3 中“Sheet1”的单元格“A1”开始的列:

wb3 = load_workbook('C:\\folder\\output.xlsx')
ws3 = wb3['Sheet1']

for counter in range(len(DateColumnA)):
    cell_id = 'A' + str(counter + 1)
    ws3[cell_id] = DateColumnA[counter]

wb3.save('C:\\folder\\output.xlsx')

【讨论】:

  • 我不知道如何以合理的格式发布回复。因此,请查看我的“答案”,这是对您建议的回应。
  • 嗨@Kierk。我修改了代码以将括号放在它所属的位置。由于我没有excel文件,我无法完全模拟场景,但我希望这会有所帮助。很抱歉这个错误。
  • 感谢您的帮助。无论我尝试了什么,我都无法通过您的方法或其他人将列表放入另一个工作表中。但幸运的是,我找到了另一种方法。但我会回到这一点,因为我想让你的方法在未来使用。
【解决方案2】:

我最终将列表写入另一个预先存在的电子表格:

for x, rows in enumerate(DateColumnA):
    ws3.cell(row=x+1, column=1).value = rows
    #print(rows)
    wb3.save('C:\\folder\\output.xlsx')

效果很好,但现在我需要确定如何从第 16 行而不是第 1 行开始将数据写入 output.xlsx,因此我不会覆盖 output.xlsx 中的前 16 个现有标题行。任何想法表示赞赏。

【讨论】:

    【解决方案3】:

    我想出了一种更简洁的方法来将源数据写入不同工作簿中目标工作表的不同起始行。我不需要像上面那样将值转储到列表中。 iter_rows 完成所有工作,openpyxl 很好地将其传递给不同的工作簿和工作表:

    row_offset=5
    for rows in ws2.iter_rows(min_row=2, max_row=None, min_col=1, max_col=1):
            for cell in rows:
                ws3.cell(row=cell.row + row_offset, column=1, value=cell.value)
                wb3.save('C:\\folder\\DestFile.xlsx')
    

    【讨论】:

    • 嗨@Kierk,很高兴您找到了解决方案。只是一个改进:将 wb3.save('C:\\folder\\DestFile.xlsx') 放在 for 循环之外,我相信您只需要在所有迭代结束时保存,而不是在每个迭代结束时保存。
    猜你喜欢
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多