openpyxl:将数据附加到第一个空列单元格
openpyxl: Append data to first empty column cell
背景:
我有一个 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 填充。
我的问题归结为 'is there a way I can append to a new column instead of a new row?'
提前致谢!
不直接:ws.append()
处理行,因为这是存储数据的方式,因此最容易针对只读和只写模式进行优化。
不过,ws.cell(row=x, column=y, value=z)
会让你随心所欲。 2.4 版(通过结帐安装)还可以让您通过为您管理对单元格的分配直接使用列:ws['E']
将 return 列中单元格的元组到当前 ws.max_row
; ws.iter_cols(min_col, min_row, max_col, max_row)
将 return 生成您需要的列。
谢谢查理,
你的回答给了我完成这件事所需的方向。参考这个问题:
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
我是 openpyxl 的新手,但我相信我们可以将列表转换为每个元素的元组列表,然后将该对象传递给 sheet.append() 函数:
L1=[a,b,c,d.....]
L2=[]
for a in L1:
L2.append(tuple(a))
for a in L2:
sheet.append(L2)
欢迎指正。
背景:
我有一个 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 填充。
我的问题归结为 'is there a way I can append to a new column instead of a new row?'
提前致谢!
不直接:ws.append()
处理行,因为这是存储数据的方式,因此最容易针对只读和只写模式进行优化。
不过,ws.cell(row=x, column=y, value=z)
会让你随心所欲。 2.4 版(通过结帐安装)还可以让您通过为您管理对单元格的分配直接使用列:ws['E']
将 return 列中单元格的元组到当前 ws.max_row
; ws.iter_cols(min_col, min_row, max_col, max_row)
将 return 生成您需要的列。
谢谢查理,
你的回答给了我完成这件事所需的方向。参考这个问题: 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
我是 openpyxl 的新手,但我相信我们可以将列表转换为每个元素的元组列表,然后将该对象传递给 sheet.append() 函数:
L1=[a,b,c,d.....]
L2=[]
for a in L1:
L2.append(tuple(a))
for a in L2:
sheet.append(L2)
欢迎指正。