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

时间:2016-04-08 16:08:34

标签: python excel 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填充。

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

提前致谢!

2 个答案:

答案 0 :(得分:6)

不直接:myDoc.Indexes(1).Select // With Selection ...适用于行,因为这是数据的存储方式,因此最容易针对只读和只写模式进行优化。

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

答案 1 :(得分:0)

我是openpyxl的新手,但我相信我们可以将列表转换为每个元素的元组列表,然后将该对象传递给sheet.append()函数:

L1=[a,b,c,d.....]
L2=[]

for a in L1:
   L2.append(tuple(a))

for a in L2:
    sheet.append(L2)

请随时纠正我。