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

背景:

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

# 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填充。

我的问题归结为“有没有一种方法可以追加到一个新的列而不是一个新的行?

提前致谢!

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

但是, ws.cell(row=x, column=y, value=z)将允许你做你想要的。 版本2.4(从一个结帐安装)也可以让你直接工作,通过pipe理你的单元格的分配: ws['E']将返回列中单元格的元组,直到当前ws.max_row ; ws.iter_cols(min_col, min_row, max_col, max_row)将返回一个列的生成器,只要你需要它。

谢谢查理,

你的回答给了我需要完成的方向。 引用这个问题: 如何使用openpyxl在python中写入新的单元格

我发现有很多方法去皮肤这个猫 – 下面的方法是我最后去的!

  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