openpyxl:将数据附加到第一个空列单元格

新手上路,请多包涵

背景:

我有一个 Excel 工作簿,其中包含分布在各种工作表中的元数据。我需要从各种工作表中提取相关的数据列,并将它们合并到一个工作表中。使用以下代码,我已经能够创建一个新工作表并向其中添加数据。

         # Open workbook and assign worksheet
        try:
            wb = openpyxl.load_workbook(metadata)
            shtEditionLNM = wb.worksheets[0]  # Edition date & latest NM
            shtChartsTitles = wb.worksheets[1]  # Charts & Titles
            shtDepthHeight = wb.worksheets[4]  # Depth & heights
            shtChartProj = wb.worksheets[7]  # Chart Projection
        except:
            raise SystemExit(0)

        new = wb.create_sheet()
        new.title = "MT_CHARTS INFO"
        new.sheet_properties.tabColor = "1072BA"
        shtMeta = wb.get_sheet_by_name("MT_CHARTS INFO")

        for row in shtChartsTitles.rows:
            shtMeta.append([row[0].value, row[1].value, row[2].value, row[4].value])
        for row in shtEditionLNM.rows:
            shtMeta.append([row[3].value, row[4].value])

        wb.save('OW - Quarterly Extract of Metadata for Raster Charts Dec 2015.xlsx')

这没有任何错误,我可以看到数据保存到我的新工作簿中。但是,当我运行第二个循环并附加值时,它们将附加到单元格 A3169,而我实际上希望它们从 E1 填充。

我的问题归结为“有没有办法可以附加到新列而不是新行?”

提前致谢!

原文由 gwright170 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 554
2 个回答

不直接: ws.append() 与行一起工作,因为这是存储数据的方式,因此最容易针对只读和只写模式进行优化。

然而, ws.cell(row=x, column=y, value=z) 将允许你做你想做的事。 2.4 版(通过结帐安装)还可以让您通过为您管理对单元格的分配来直接使用列: ws['E'] 将返回列中单元格的元组,直到当前 ws.max_row ; ws.iter_cols(min_col, min_row, max_col, max_row) 将返回一个与您需要一样大的列生成器。

原文由 Charlie Clark 发布,翻译遵循 CC BY-SA 3.0 许可协议

谢谢查理,

您的回答给了我完成这项工作所需的方向。参考这个问题: how to write to a new cell in python using openpyxl

我发现有很多方法可以给这只猫剥皮——下面的方法是我最终采用的方法!

     x=0
    for row in shtEditionLNM.rows:
        x+=1
        shtMeta.cell(coordinate="E{}".format(x)).value = row[3].value
        shtMeta.cell(coordinate="F{}".format(x)).value = row[4].value

原文由 gwright170 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题