【问题标题】:Openpyxl - Writing from dictionary to excel rows and columnsOpenpyxl - 从字典写入 excel 行和列
【发布时间】:2016-05-07 11:21:38
【问题描述】:

所以我想做的是从字典中写入现有的 excel 文件:

wb = load_workbook(filename='test.xlsx')
ws2 = wb.get_sheet_by_name("Blad3")
tuple(ws2.iter_rows('A2:I1000'))
for i in ws2.iter_rows('A2:I1000'):
    print str(row[0].value)
    for i in Candidates:
        row[0].value = i['Start Location']
        row[1].value = i['Distance']
        row[2].value = i['End Location']
    for p in Potential_candidates:
        row[4].value = p['Start Location']
        row[5].value = p['Distance']
        row[6].value = p['End Location']
    for n in No_coords:
        row[8].value = No_coords
print 'Saving to file "test.xlsx"'
wb.save('test.xlsx')

“print str(row[0].value)”从工作表中获取正确的值,但是当我尝试设置它时显示的值: TypeError:“NoneType”对象没有属性“getitem”。

错误发生在row[0].value = i['Start Location']

我一直试图找出原因,要么我错过了最明显的事情,要么我完全迷失了。如果你不应该可以写信给单元格 可以从中读取吗?

所以我发现 NoneType 错误有什么问题,显然该列表在 [0] 处有一个 None 元素。 所以我添加了一个函数来从所有列表中删除这些元素,现在我有一个新错误:

TypeError: 'tuple' 对象不支持项目分配

【问题讨论】:

  • 第三行 (tuple(ws2.iter_rows('A2:I1000'))) 在做什么?
  • 哦,这并没有什么作用,它更像是对我自己的一个提醒。讽刺的是,我记得这是一个提醒:P

标签: python excel dictionary


【解决方案1】:

所以我发现我做错了什么,首先,我的代码试图用整个字典而不是第一个元素填充每一行。 其次 row[0]= 没有工作,因为......原因。所以我做了一个凌乱的解决方案(但有效):

def write_excel():
wb = load_workbook(filename='test.xlsx')
ws = wb.get_sheet_by_name("Blad3")
count = 0
for row in ws.iter_rows('A2:I500'):
    x = str(row[0].coordinate)
    x1 = str(row[1].coordinate)
    x2 = str(row[2].coordinate)
    x3 = str(row[4].coordinate)
    x4 = str(row[5].coordinate)
    x5 = str(row[6].coordinate)
    x6 = str(row[8].coordinate)
    try:
        Start = Candidates[count]['Start Location']
        Dist = Candidates[count]['Distance']
        End = Candidates[count]['End Location']
        ws[x] = Start
        ws[x1] = Dist
        ws[x2] = End
    except IndexError:   
        pass
    try:
        Pstart = Potential_candidates[count]['Start Location']
        Pdist = Potential_candidates[count]['Distance']
        Pend = Potential_candidates[count]['End Location']
        ws[x3] = Pstart
        ws[x4] = Pdist
        ws[x5] = Pend
    except IndexError:
        pass
    try:
        NoCoo = No_coords[count]
        ws[x6] = NoCoo
    except IndexError:
        pass
    count=count+1
print 'Saving to file "test.xlsx"'
wb.save('test.xlsx')  

我知道它可以清理很多,但它帮助我了解了便便的原因,所以希望它也可以帮助其他人:) 当我为整个程序创建更好的代码结构时,我会清理它。

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多