Python openpyxl写列表到Excel错误 [英] Python openpyxl write list to Excel error

查看:2726
本文介绍了Python openpyxl写列表到Excel错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很熟悉Python,并且在我的第一个项目上工作。我试图让我的代码从一个电子表格中复制数据列,并将其附加到主表中当前存在的数据。我能够捕获每个表中的数据,并创建一个组合两个数据集的新主列表,但是我无法将其写入文件。当我测试打印它们显示正确的组合列表时,但是当我添加代码将列表写入文件时,它将被挂起。



您可以提供的任何帮助将非常有用!



以下是我的代码。这是我得到的错误



追溯(最近的最后一次呼叫):
文件/Path/Path/Path/extractData.py,第50行,
destSheet.cell(row = rowNum,column = 1).value = masterList1



文件/Library/Frameworks/Python.framework/Versions/ 3.4 / lib / python3.4 / site-packages / openpyxl / cell / cell.py,第313行,值为
self._bind_value(value)



文件/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/openpyxl/cell/cell.py,第217行,_bind_value
raise ValueError(Can not convert {0}到Excel.format(value))



ValueError:无法转换['Reinsurer','Market 1','Market 2','Market 3' ,市场4,市场5,市场1,市场2,市场3,市场4,市场5 ','市场4','市场5']]到Excel

  import openpyxl 

#开源数据文件e
sourceFile = openpyxl.load_workbook('/ Path / Path / Path / testAuth.xlsx')
sourceSheet = sourceFile.get_sheet_by_name('Sheet1')

#read data from源文件并创建新数据列表
newList1 = []
newList2 = []
newList3 = []

用于范围内的行(2,sourceSheet.get_highest_row ())
data1 = sourceSheet ['A'+ str(row)]。value
newList1.append(data1)
data2 = sourceSheet ['B'+ str(row)] $ value
newList2.append(data2)
data3 = sourceSheet ['C'+ str(row)] value
newList3.append(data3)

#包含主数据库的打开的目标工作簿
destFile = openpyxl.load_workbook('/ Path / Path / Path / testHist.xlsx')
destSheet = destFile.get_sheet_by_name('Sheet1')

#create用于复制工作簿中已有历史数据的空列表
masterList1 = []
masterList2 = []
masterList3 = []

#grab掌握电子表格数据和写列出
的范围内的行(1,destSheet.get_highest_row()+ 1):
masterData1 = destSheet ['A'+ str(row)]。value
masterList1.append(masterData1 )
masterData2 = destSheet ['B'+ str(row)]。value
masterList2.append(masterData2)
masterData3 = destSheet ['C'+ str(row)] value
masterList3.append(masterData3)

#将新数据添加到历史列表
masterList1.append(newList1)
masterList2.append(newList2)
masterList3 .append(newList3)

#write新的主列表到一个新文件
for rangeNum in range(2,len(masterList1)):
destSheet.cell(row = rowNum ,column = 1).value = masterList1

destSheet.save(updatedTest.xlsx)


解决方案

而不是将每个单元格的值分配给 masterList1 ,您可能要使用 masterList1 [rowNum] 作为值:

  for rangeNum in range(2,len主列表1)):
destSheet.cell(row = rowNum,column = 1).value = masterList1 [rowNum]

另外,正如@mgrant指出的那样,你应该先扩展(不附加)主列表:

  masterList1.extend(newList1)


I am new to Python and working on my first project. I am trying to get my code to copy columns of data from one spreadsheet and append it to data that currently exists in a master sheet. I am able to capture the data in each of the sheets and create a new master list which combines both data sets, but I am having trouble writing it to a file. When I test print the combined lists they appear correct, but when I add the code to write the lists to a file it gets hung up.

Any assistance you can provide will be extremely helpful!

Below is my code. Here's the error I'm getting

Traceback (most recent call last): File "/Path/Path/Path/extractData.py", line 50, in destSheet.cell(row=rowNum, column=1).value = masterList1

File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/openpyxl/cell/cell.py", line 313, in value self._bind_value(value)

File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/openpyxl/cell/cell.py", line 217, in _bind_value raise ValueError("Cannot convert {0} to Excel".format(value))

ValueError: Cannot convert ['Reinsurer', 'Market 1', 'Market 2', 'Market 3', 'Market 4', 'Market 5', 'Market 1', 'Market 2', 'Market 3', 'Market 4', 'Market 5', ['Market 1', 'Market 2', 'Market 3', 'Market 4', 'Market 5']] to Excel

import openpyxl

#Open source data file
sourceFile = openpyxl.load_workbook('/Path/Path/Path/testAuth.xlsx')
sourceSheet = sourceFile.get_sheet_by_name('Sheet1')

#read data from source file and create lists of new data
newList1 = []
newList2 = []
newList3 = []

for row in range(2, sourceSheet.get_highest_row()):
    data1 = sourceSheet['A' + str(row)].value
    newList1.append(data1)
    data2 = sourceSheet['B' + str(row)].value
    newList2.append(data2)
    data3 = sourceSheet['C' + str(row)].value
    newList3.append(data3)

#open destination workbook that includes the master database
destFile = openpyxl.load_workbook('/Path/Path/Path/testHist.xlsx')
destSheet = destFile.get_sheet_by_name('Sheet1')

#create empty lists for copying the historical data already in the workbook
masterList1 = []
masterList2 = []
masterList3 = []

#grab master spreadsheet data and write to list
for row in range(1, destSheet.get_highest_row()+1):
    masterData1 = destSheet['A'+ str(row)].value
    masterList1.append(masterData1)
    masterData2 = destSheet['B'+ str(row)].value
    masterList2.append(masterData2)
    masterData3 = destSheet['C'+ str(row)].value
    masterList3.append(masterData3)

#append new data to the history list
masterList1.append(newList1)
masterList2.append(newList2)
masterList3.append(newList3)

#write new master list to a new file
for rowNum in range(2, len(masterList1)):
    destSheet.cell(row=rowNum, column=1).value = masterList1

destSheet.save("updatedTest.xlsx")

解决方案

Instead of assigning the value of each cell to masterList1, you probably meant to use the masterList1[rowNum] as a value:

for rowNum in range(2, len(masterList1)):
    destSheet.cell(row=rowNum, column=1).value = masterList1[rowNum]

Plus, as @mgrant pointed out, you should've extended (not appended) the master list previously:

masterList1.extend(newList1)

这篇关于Python openpyxl写列表到Excel错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆