如何使用openpyxl在Python中写入新单元格

30

我编写了一段代码,它打开一个Excel文件,遍历每一行并将值传递给另一个函数。

import openpyxl
wb = load_workbook(filename='C:\Users\xxxxx')
for ws in wb.worksheets:
    for row in ws.rows:
        print row
        x1=ucr(row[0].value)
        row[1].value=x1  #  i am having error at this point

当我尝试运行该文件时,出现了以下错误。

TypeError: IndexError: tuple index out of range

我可以将返回值x1写入row[1]列吗?是否可以直接使用row[1]来写入Excel,而不是像ws['c1'] = x1那样访问单个单元格。


你的代码不符合你所说想要做的事情。 - Charlie Clark
1个回答

70

试一下这个:

import openpyxl
wb = load_workbook(filename='xxxx.xlsx')
ws = wb.worksheets[0]
ws['A1'] = 1
ws.cell(row=2, column=2).value = 2

这将分别将单元格A1和B2设置为1和2(在工作表中设置单元格值的两种不同方式)。

第二种方法(指定行列)对您的情况最有用:

import openpyxl
wb = load_workbook(filename='xxxxx.xlsx')
for ws in wb.worksheets:
    for index, row in enumerate(ws.rows, start=1):
        print row
        x1 = ucr(row[0].value)
        ws.cell(row=index, column=2).value = x1

有150行,访问每个单元格并写入数据会很困难。例如ws['a1']=x1,ws['a2']=''。我希望有一个通用的解决方案。感谢您的帮助。 - Priyaranjan
1
请使用我提供的第二种形式:ws.cell(row=X, column=Y).value = V。 - Jake Griffin
1
我已经更新了我的答案,包括如何在你的特定情况下使用该方法。 - Jake Griffin
28
请注意,除非您保存文件,否则更改不会反映在Excel文件中。wb.save(fileName) - MackM
在 openpyxl 3.0.7 中,使用 ws.cell(row, column)/ws.cell(coordinate) 方法不再可用。ws["A1"] 如预期一样工作。 - Cecilya
1
@Cecilya - 我查看了文档,发现它不再提及“coordinate” kwarg,所以我认为你关于第三种方法不再起作用是正确的。然而,我刚刚在openpyxl 3.0.9上重新测试了所有这些方法,第二种方法仍然对我有效。根据文档和我的测试,显然ws.cell(row=4, column=4, value=4)现在也可以使用,但我认为我的答案中第二种方法更清晰,所以我将其保留。我正在更新我的答案以反映第三种方法不再起作用。 - Jake Griffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接