Python openpyxl écrire la liste vers Excel erreur
Je suis nouveau à Python et à travailler sur mon premier projet. J'essaie d'obtenir mon code pour copier des colonnes de données à partir d'une feuille de calcul et l'ajouter aux données qui existent actuellement dans une fiche. Je suis en mesure de saisir les données dans chacune des feuilles et de créer une nouvelle liste principale qui combine les deux ensembles de données, mais j'ai du mal à l'écrire dans un fichier. Quand j'essai d'imprimer les listes combinées ils apparaissent correct, mais quand j'ajoute le code pour écrire les listes dans un fichier qu'il est accrochée.
Toute aide que vous pouvez fournir serait très utile!
Ci-dessous mon code. Voici l'erreur que je reçois
Traceback (most recent call last):
Le fichier "/Path/Path/Path/extractData.py", ligne 50, dans
destSheet.cellule(ligne=rowNum, column=1).valeur = masterList1
Fichier "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/openpyxl/cell/cell.py"de ligne, 313, en valeur
auto._bind_value(valeur)
Fichier "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/openpyxl/cell/cell.py", la ligne 217, dans _bind_value
raise ValueError("Impossible de convertir {0} vers Excel".format(valeur))
ValueError: Impossible de convertir ['Réassureur', 'Marché 1', 'Marché 2', 'marche 3', 'Marché 4', 'Marché 5', 'Marché 1', 'Marché 2', 'marche 3', 'Marché 4', 'Marché 5', ['Marché 1', 'Marché 2', 'marche 3', 'Marché 4', 'Marché 5']] pour 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")
Vous devez vous connecter pour publier un commentaire.
Au lieu d'affecter la valeur de chaque cellule de
masterList1
, vous avez probablement censé utiliser lemasterList1[rowNum]
comme une valeur:Plus, comme @mgrant souligné, vous devriez ai étendu (non jointe) de la liste de référence précédemment:
Avez-vous essayé d'utiliser
extend
au lieu deappend
?append
ajoute un seul élément à la fin d'une liste, alors que lesextend
prend une liste d'argument et ajoute chaque élément.append
méthode qui est similaire à laappend
méthode pour les listes, mais est spécifique de la syntaxe et de la sémantique. L'exception est générée lorsque vous essayez d'affecter une liste à une seule cellule.extend
était nécessaire dans le sens que @alecxe a souligné, lors de la construction de masterList1, etc. Mais je suis d'accord que la cession a été le véritable problème.