web-dev-qa-db-fra.com

Modifier un fichier Excel existant à l'aide d'Openpyxl dans Python

J'essaie essentiellement de copier certaines colonnes spécifiques d'un fichier CSV et de les coller dans un fichier Excel existant [*. Xlsx] en utilisant python. Disons par exemple que vous avez un fichier CSV comme celui-ci:

 col_1   col_2   col_3  col_4
  1        2       3     4
  5        6       7     8
  9       10      11    12 

Donc, je voulais copier les deux col_3 et col_4 et les coller dans col_8 et col_9 dans un fichier Excel existant [qui est un format .XLSX]. J'ai essayé cela de différentes manières pour résoudre, mais je n'ai pas pu trouver le moyen exact. j'ai essayé quelque chose comme ça:

with open( read_x_csv, 'rb') as f:
    reader = csv.reader(f)
    for row in reader: 
            list1 = row[13] 
            queue1.append(list1)
            list2 = row[14] 
            queue2.append(list2)
            list3 = row[15] 
            queue3.append(list3)
            list4 = row[16] 
            queue4.append(list4)

puis

 rb = open_workbook("Exact file path.....")
 wb = copy(rb)
 ws = wb.get_sheet(0) 

 row_no = 0

 for item in queue1:
    if(item != ""):
            ii = int(item)
            ws.write(row_no,12,ii) 
            row_no = row_no + 1
            #ws.write(item)
            print item
    else:

            ws.write(row_no,12,item) 
            row_no = row_no + 1

  wb.save("Output.xls") 

mais le problème avec cette solution est qu'elle ne me permet pas d'enregistrer au format * .XLSX qui est strictement requis pour moi.

J'ai essayé d'utiliser Openpyxl car il peut gérer le format * .XLSX, mais je n'ai pas trouvé de moyen de modifier le fichier Excel existant. quelqu'un peut-il m'aider à ce sujet?

Doute: 1) Pouvons-nous vraiment lire une colonne entière d'un fichier CSV et la stocker dans un tableau/liste en utilisant python? 2) Pouvons-nous modifier le fichier Excel existant qui est au format .XLSX en utilisant openpyxl ou tout autre package?

12
paul suk

Vous pouvez essayer l'implémentation suivante

from openpyxl import load_workbook
import csv
def update_xlsx(src, dest):
    #Open an xlsx for reading
    wb = load_workbook(filename = dest)
    #Get the current Active Sheet
    ws = wb.get_active_sheet()
    #You can also select a particular sheet
    #based on sheet name
    #ws = wb.get_sheet_by_name("Sheet1")
    #Open the csv file
    with open(src) as fin:
        #read the csv
        reader = csv.reader(fin)
        #enumerate the rows, so that you can
        #get the row index for the xlsx
        for index,row in enumerate(reader):
            #Assuming space separated,
            #Split the row to cells (column)
            row = row[0].split()
            #Access the particular cell and assign
            #the value from the csv row
            ws.cell(row=index,column=7).value = row[2]
            ws.cell(row=index,column=8).value = row[3]
    #save the csb file
    wb.save(dest)
  • Pouvons-nous vraiment lire une colonne entière d'un fichier CSV et la stocker dans un tableau/liste en utilisant python? Non, car les fichiers sont lus séquentiellement, le lecteur csv ne peut pas lire une colonne de données sur une ligne. Au lieu de cela, vous pouvez lire tout le contenu et utiliser izip et islice pour obtenir une colonne particulière. Vous pouvez également utiliser numpy.array

  • Pouvons-nous modifier le fichier Excel existant qui est au format .XLSX en utilisant openpyxl ou tout autre package? Oui, voir l'exemple ci-dessus

20
Abhijit
from openpyxl import load_workbook
# Class to manage Excel data with openpyxl.

class Copy_Excel:
    def __init__(self,src):
        self.wb = load_workbook(src)
        self.ws = self.wb.get_sheet_by_name("Sheet1")
        self.dest="destination.xlsx"

    # Write the value in the cell defined by row_dest+column_dest         
    def write_workbook(self,row_dest,column_dest,value):
        c = self.ws.cell(row = row_dest, column = column_dest)
        c.value = value

    # Save Excel file
    def save_Excel(self) :  
        self.wb.save(self.dest)
1
Heisenberg

Dans mon cas, j'ai gardé le fichier Excel ouvert, donc le script n'a pas pu être enregistré et j'ai obtenu une autorisation refusée. Après avoir fermé le fichier Excel, mon script a mis à jour le même fichier Excel.

0
John Prawyn