Python openpyxl写入列表到Excel错误

时间:2015-07-06 00:13:35

标签: python excel openpyxl

我是Python的新手,正在开发我的第一个项目。我试图让我的代码从一个电子表格中复制数据列,并将其附加到当前存在于主表单中的数据。我能够捕获每个工作表中的数据并创建一个新的主列表,它结合了两个数据集,但我无法将其写入文件。当我测试打印组合列表时,它们看起来是正确的,但是当我添加代码将列表写入文件时,它会挂起。

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

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

追踪(最近一次通话):   文件“/Path/Path/Path/extractData.py”,第50行,in     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(值)

文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/openpyxl/cell/cell.py”,第217行,在_bind_value中     引发ValueError(“无法将{0}转换为Excel”.format(value))

ValueError:无法转换['Reinsurer','Market 1','Market 2','Market 3','Market 4','Market 5','Market 1','Market 2','Market 3 ','市场4','市场5',['市场1','市场2','市场3','市场4','市场5']]到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")

2 个答案:

答案 0 :(得分:2)

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

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

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

masterList1.extend(newList1)

答案 1 :(得分:-1)

您是否尝试过使用extend代替appendappend将一个项目添加到列表的末尾,而extend采用list参数并添加每个项目。