2016-12-16 4 views
0

Supposons que j'ai A1 comme seule cellule dans un classeur, et il est vide. Je veux que mon code pour ajouter « 1 » « 2 » et « 3 » pour elle il dit « 1 2 3 »python ajouter des données à la cellule Excel existante Win32com

A partir de maintenant je:

NUMBERS = [1, 2, 3, 4, 5] 
ThisSheet.Cells(1,1).Value = NUMBERS 

ce écrit que la première valeur à la cellule. J'ai essayé

ThisSheet.Cells(1,1).Value = Numbers[0-2] 

mais cela met juste la DERNIERE valeur dedans là. Y a-t-il un moyen pour moi d'ajouter simplement toutes les données? Cette information sera toujours au format String, et j'ai besoin d'utiliser Win32Com.

mise à jour: j'ai fait

stringVar = '' .join (str (v) v dans la liste)

MISE À JOUR: ce .join fonctionne parfaitement pour la liste des numéros. Maintenant, j'ai essayé de l'attribuer à une autre liste qui ressemble à ceci

LIST=[Description Good\nBad, Description Valid\nInvalid] 

Si j'imprimer la liste [0] Le résultat est

Description Good 
Bad 

qui est ce que je veux. Mais si j'utilise .join sur celui-ci, il imprime

('Description Good\nBad, Description Valid\nInvalid') 

donc pour celui-ci je besoin pour imprimer comme si je l'ai fait la liste [0] et LIST [1]

+0

Si vous voulez toutes les valeurs de NUMBERS alors vous semblez avoir besoin de 'ThisSheet.Cells (1,1) .Value = '' .join ([str (_) pour _ dans NUMBERS])'. Si vous voulez juste les trois premières valeurs alors utilisez 'ThisSheet.Cells (1,1) .Value = '' .join ([str (_) pour _ dans NUMBERS [: 3]])'. –

+0

C'est essentiellement ce que j'ai fait avec mon stringVar, et cela fonctionne, sauf qu'il imprime les caractères spéciaux au lieu de seulement les éléments de la liste. Donc, il imprime \ n au lieu de l'écrire sur une nouvelle ligne. Il imprime également ('au début et') à la fin de chaque article. – nico

+0

Ne peut pas aider alors puisque je n'ai pas Excel. –

Répondre

1

Donc, si vous voulez mettre chaque numéro dans une autre cellule, vous feriez quelque chose comme:

it = 1 
for num in NUMBERS: 
    ThisSheet.Cells(1,it).Value = num 
    it += 1 

Ou si vous voulez que les 3 premiers chiffres dans la même cellule:

ThisSheet.Cells(1,it).Value = ' '.join([str(num) for num in NUMBERS[:3]]) 

Ou tous les éléments en NUMBERS:

ThisSheet.Cells(1,1).Value = ' '.join([str(num) for num in NUMBERS]) 

EDIT

En fonction de votre édition de question, pour les types de chaîne contenant \n et à supposer que chaque fois que vous trouverez un caractère de nouvelle ligne, vous voulez passer à la la ligne suivante:

# Split the LIST[0] by the \n character 
splitted_lst0 = LIST[0].split('\n') 
# Iterate through the LIST[0] splitted by newlines 
it = 1 
for line in splitted_lst0: 
    ThisSheet.Cells(1,it).Value = line 
    it += 1 

Si vous voulez faire cela pour l'ensemble LIST et non seulement pour LIST[0], d'abord fusionner avec la méthode join et diviser juste après:

joined_list = (''.join(LIST)).split('\n') 

Et puis, itérer la même façon que nous l'avons fait auparavant.

+0

en utilisant cela fonctionnerait très bien si je n'avais pas de nouvelles lignes dans ma liste. A partir de maintenant, c'est l'impression \ n au lieu de passer à une nouvelle ligne, et ('au début de chaque article ainsi que') à la fin de chaque article. Un moyen de contourner ça? – nico

+0

@nico voulez-vous dire que vous avez des nouvelles lignes dans NUMBERS? Est-ce que NUMBERS de type String est? – otorrillas

+0

excuses. Au début, j'essayais de faire fonctionner les chiffres, mais j'ai essayé de faire la même chose avec une deuxième liste qui a de nouvelles lignes. Chaque liste contient des chaînes, et pas d'ints. La deuxième liste est comme List = [Description Bon \ n Mauvais, Description valide \ n invalide] Je ne peux pas fournir la liste exacte en raison des restrictions, mais quand j'imprime Liste [0] il imprime Description Bon et Mauvais sur de nouvelles lignes. Quand j'utilise .join, il affiche ('Description Good \ nBad'), ('Description valide \ nInvalide') – nico