繁体   English   中英

使用 Python 错误将公式写入 Excel

[英]Write formula to Excel with Python error

我尝试按照这个问题使用 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 版本。

****更新****

完整代码:

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):

类型错误:“生成器”对象没有属性“ getitem

ws.columnsws.rows是返回生成器的属性。 但是openpyxl也支持对行和列进行切片和索引

因此, ws['C']将给出第三列中的单元格列表。

对于其他希望复制/粘贴公式的 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 行开始吗?

如果您想从另一行开始,您可以使用 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 以返回单元格对象的值。

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

  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)'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM