【问题标题】:how to write to a new cell in python using openpyxl如何使用openpyxl在python中写入新单元格
【发布时间】:2015-07-13 23:15:49
【问题描述】:

我编写的代码打开一个 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] 列吗?是否可以写入excel(即使用row[1])而不是访问像ws.['c1']=x1这样的单个单元格

【问题讨论】:

  • 您的代码没有反映您所说的想要做的事情。

标签: python excel openpyxl


【解决方案1】:

试试这个:

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']='' 。我希望有一般的解决方案。感谢您的帮助
  • 所以使用我给出的第二种形式:ws.cell(row=X, column=Y).value = V
  • 我已经更新了我的答案,包括您在特定情况下如何使用该方法。
  • 请注意,除非您保存文件,否则更改不会反映在 Excel 文件中。 wb.save(fileName)
  • @Cecilya - 我检查了文档,它不再提到“坐标”kwarg,所以我认为你对方法 3 不再起作用是正确的。不过,我刚刚在 openpyxl 3.0.9 上再次测试了所有这些,第二个仍然对我有用。根据文档和我的测试,显然ws.cell(row=4, column=4, value=4) 现在也可以使用,但是我认为我的答案中的第二种方法更清晰,所以我将其省略。我正在更新我的答案以反映第三种方法不再起作用。
猜你喜欢
  • 1970-01-01
  • 2019-12-10
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多