使用Python错误

时间:2017-07-16 20:57:15

标签: python excel openpyxl

我尝试按照question使用python和openpyxl包在excel中添加一些公式。

这个链接是我完成任务所需要的。

但在此代码中:

for i, cellObj in enumerate(Sheet.columns[2], 1):
    cellObj.value = '=IF($A${0}=$B${0}, "Match", "Mismatch")'.format(i) 

我在Sheet.columns[2]时出错,知道为什么?我按照完整的代码。

我有python 2.7.13版本,如果这有助于此错误。

**** **** UPDATE

完整代码:

import openpyxl
wb = openpyxl.load_workbook('test1.xlsx')
print wb.get_sheet_names()
Sheet = wb.worksheets[0]
for i, cellObj in enumerate(Sheet.columns[2], 1):
    cellObj.value = '=IF($A${0}=$B${0}, "Match", "Mismatch")'.format(i)

错误消息:

for i, cellObj in enumerate(Sheet.columns[2], 1):
  

TypeError:'generator'对象没有属性' getitem '

4 个答案:

答案 0 :(得分:2)

{ loader: "pug-html-loader", options: { exports: false, pretty: PRODUCTION ? false : true, data: { hash: WEBPACK HASH HERE } } } WEBPACK HASH HERE是返回生成器的属性。但是openpyxl也支持slicing and indexing for rows and columns

因此,ws.columns将列出第三列中的单元格。

答案 1 :(得分:0)

对于其他希望复制/粘贴公式的Stack冒险者:

# Writing from pandas back to an existing EXCEL workbook

wb = load_workbook(filename=myfilename, read_only=False, keep_vba=True)
ws = wb['Mysheetname']

# Paste a formula Vlookup!  Look at column A, put result in column AC.

for i, cellObj in enumerate(ws['AC'], 1):
    cellObj.value = "=VLOOKUP($A${0}, 'LibrarySheet'!C:D,2,FALSE)".format(i)

一个问题,我有一个标题,公式覆盖了它。有人知道如何从第2行开始吗?

答案 2 :(得分:0)

如果要从另一行开始,则可以使用if语句跳过第一行,或在枚举中指定范围。下面是一个编码示例:

wb = load_workbook(filename=myfilename, read_only=False, keep_vba=True)
ws = wb['Mysheetname']

# using an if statement
for i, cellObj in enumerate(ws['AC'], 1):
    if i > 1: 
        cellObj.value = "=VLOOKUP($A${0}, 'LibrarySheet'!C:D,2,FALSE)".format(i)

# specifying range, up to max row on worksheet - or you can specify an exact range
for i, cellObj in enumerate(ws['AC2:AC'+str(ws.max_row)],2):
    cellObj[0].value = "=VLOOKUP($A${0}, 'LibrarySheet'!C:D,2,FALSE)".format(i)

第二种方法要求您从2开始索引并返回一个元组而不是一个单元格对象,因此您需要指定cellObj [0] .value以返回该单元格对象的值。

答案 3 :(得分:0)

幸运的是,现在您可以轻松地在某些记录中执行公式。还有一些更简单的功能可以使用,例如:

  1. wb.sheetnames 而不是 wb.read_sheet_names()
  2. sheet = wb['SHEET_NAME'] 而不是 sheet = wb.get_sheet_by_name('SHEET_NAME')

公式可以很容易地插入:

sheet['A1'] = '=SUM(1+1)'