web-dev-qa-db-fra.com

xlsxwriter: existe-t-il un moyen d'ouvrir une feuille de calcul existante dans mon classeur?

Je peux ouvrir mon classeur préexistant, mais je ne vois aucun moyen d'ouvrir des feuilles de travail préexistantes dans ce classeur. Y a-t-il un moyen de faire ça?

13
Nick

Vous ne pouvez pas ajouter à un fichier xlsx existant avec xlsxwriter.

Il existe un module appelé openpyxl qui vous permet de lire et d’écrire dans un fichier Excel préexistant, mais je suis sûr que la méthode consiste à lire le fichier Excel et à stocker toutes les informations (base de données ou tableaux), puis réécrivez lorsque vous appelez workbook.close() qui écrira ensuite toutes les informations dans votre fichier xlsx.

De même, vous pouvez utiliser votre propre méthode pour "ajouter" des documents xlsx. J'ai récemment dû annexer à un fichier xlsx parce que j'avais beaucoup de tests dans lesquels les données GPS étaient entrées dans une feuille de calcul principale, puis que je devais annexer une nouvelle feuille chaque fois qu'un test commençait. Le seul moyen de résoudre ce problème sans openpyxl était de lire le fichier Excel avec xlrd puis de parcourir les lignes et les colonnes ...

c'est à dire.

cells = []
for row in range(sheet.nrows):
    cells.append([])
    for col in range(sheet.ncols):
        cells[row].append(workbook.cell(row, col).value)

Vous n'avez pas besoin de tableaux, cependant. Par exemple, cela fonctionne parfaitement bien:

import xlrd
import xlsxwriter

from os.path import expanduser
home = expanduser("~")

# this writes test data to an Excel file
wb = xlsxwriter.Workbook("{}/Desktop/test.xlsx".format(home))
sheet1 = wb.add_worksheet()
for row in range(10):
    for col in range(20):
        sheet1.write(row, col, "test ({}, {})".format(row, col))
wb.close()

# open the file for reading
wbRD = xlrd.open_workbook("{}/Desktop/test.xlsx".format(home))
sheets = wbRD.sheets()

# open the same file for writing (just don't write yet)
wb = xlsxwriter.Workbook("{}/Desktop/test.xlsx".format(home))

# run through the sheets and store sheets in workbook
# this still doesn't write to the file yet
for sheet in sheets: # write data from old file
    newSheet = wb.add_worksheet(sheet.name)
    for row in range(sheet.nrows):
        for col in range(sheet.ncols):
            newSheet.write(row, col, sheet.cell(row, col).value)

for row in range(10, 20): # write NEW data
    for col in range(20):
        newSheet.write(row, col, "test ({}, {})".format(row, col))
wb.close() # THIS writes

Cependant, j’ai trouvé qu’il était plus facile de lire les données et de les stocker dans un tableau à 2 dimensions, car je manipulais les données et recevais des entrées encore et encore et ne voulais pas écrire dans le fichier Excel tant que le test n’était pas terminé (ce que vous pourriez tout aussi bien faire avec xlsxwriter puisque c'est probablement ce qu'ils font de toute façon jusqu'à ce que vous appeliez .close()).

19
dylnmc

Après avoir un peu cherché la méthode pour ouvrir la feuille existante dans xlxs, j'ai découvert 

existingWorksheet = wb.get_worksheet_by_name('Your Worksheet name goes here...')
existingWorksheet.write_row(0,0,'xyz')

Vous pouvez maintenant ajouter/écrire toutes les données sur la feuille de calcul ouverte . J'espère que cela vous aidera . Merci

0
Dikshit Kathuria