2 votes

Est-il possible de créer une nouvelle colonne pour chaque itération dans XlsxWriter ?

Je veux écrire des données dans des colonnes Excel à l'aide de XlsxWriter. Un "ensemble" de données est écrit pour chaque itération. Chaque ensemble doit être écrit dans une colonne distincte. Comment dois-je m'y prendre ?
J'ai essayé de jouer avec le col comme suit :

  • Sur [1] Je définis i=0 en dehors de la boucle et l'incrémenter ensuite de 1 et mettre col=i . Lorsque cela est fait, la sortie est vide. Pour moi, c'est la solution la plus logique et je ne sais pas pourquoi elle ne fonctionne pas.
  • Sur [2] i est défini à l'intérieur de la boucle. Lorsque cela se produit, une colonne est écrite.
  • Sur [3] Je définis col la manière standard. Cela fonctionne comme prévu : Une colonne est écrite.

Mon code :

import xlsxwriter

txt_file = open('folder/txt_file','r')
lines = dofile.readlines()

# [1]Define i outside the loop. When this is used output is blank.
i = 0
for line in lines:

    if condition_a is met:
        #parse text file to find a string. reg_name = string_1.

    elif condition_b:
        #parse text file for a second string. esto_name = string_2.

    elif condition_c:
        #parse text file for a group of strings. 
        # use .split() to append these strings to a list.
        # reg_vars = list of strings.

        #[2] Define i inside the loop. When this is used one column gets written. Relevant for [1] & [2].
        i+=1 #Increment for each loop
        row=1
        col=i #Increments by one for each iteration, changing the column.

        #[3] #Define col =1. When this is used one column also gets written.
        col=1 

        #Open Excel
        book= xlsxwriter.Workbook('folder/variable_list.xlsx')
        sheet = book.add_worksheet()

        #Write reg_name
        sheet.write(row, col, reg_name)
        row+=1

         #Write esto_name
        sheet.write(row, col, esto_name)
        row+=1
        #Write variables
        for variable in reg_vars:
            row+=1
            sheet.write(row, col, variable)   

    book.close()

0voto

jmcnamara Points 6100

Vous pouvez utiliser le XlsxWriter write_column() pour écrire une liste de données sous forme de colonne.

Cependant, dans ce cas particulier, le problème semble être que vous créez un nouveau fichier, en double, via xlsxwriter.Workbook() à chaque fois que vous passez par le condition_c partie de la boucle. Par conséquent, la dernière valeur de col est utilisé et le fichier entier est écrasé lors du prochain passage de la boucle.

Vous devriez probablement déplacer la création du fichier xlsx en dehors de la boucle. Probablement au même endroit que vous open() le fichier texte.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X