Éditer les classements et feuilles excel existants avec xlrd et xlwt

Dans le documentationxlrd et xlwt j'ai appris ce qui suit:

Comment lire à partir d'ouvrages existants-livres / feuilles:

from xlrd import open_workbook
wb = open_workbook("ex.xls")
s = wb.sheet_by_index(0)
print s.cell(0,0).value
#Prints contents of cell at location a1 in the first sheet in the document called ex.xls

comment créer de nouveaux livres/feuilles de travail:

from xlwt import Workbook
wb = Workbook()
Sheet1 = wb.add_sheet('Sheet1')
Sheet1.write(0,0,'Hello')
wb.save('ex.xls')
#Creates a document called ex.xls with a worksheet called "Sheet1" and writes "Hello" to the cell located at a1

Ce que je veux faire maintenant est d'ouvrir une feuille de calcul existante, dans un classeur existant et d'écrire sur cette feuille.

j'ai essayé quelque chose comme:

from xlwt import open_workbook
wb = open_workbook("ex.xls")
s = wb.sheet_by_index(0)
print s.cell(0,0).value

mais open_workbook n'est qu'une partie de l' xlrd module, pas xlwt.

des idées?

Edit 1: Après la suggestion D'Olivers j'ai regardé dans xlutils et j'ai essayé le code suivant:

from xlrd import open_workbook
from xlwt import Workbook
from xlutils.copy import copy

wb = open_workbook("names.xls")
s = wb.get_sheet(0)
s.write(0,0,'A1')
wb.save('names.xls')

cependant, Cela me donne le message d'erreur suivant:

File "C:Python27libsite-packagesxlrdbook.py", line 655, in get_sheet
raise XLRDError("Can't load sheets after releasing resources.")
xlrd.biffh.XLRDError: Can't load sheets after releasing resources.

Modifier 2: Le message d'erreur était dû à une mauvaise utilisation de get_sheet fonction. Enfin trouvé comment l'utiliser:

from xlrd import open_workbook
from xlwt import Workbook
from xlutils.copy import copy

rb = open_workbook("names.xls")
wb = copy(rb)

s = wb.get_sheet(0)
s.write(0,0,'A1')
wb.save('names.xls')
21
demandé sur Jack Pettersson 2014-11-16 17:07:23

2 réponses

Comme je l'ai écrit dans les modifications de l'op, modifier des documents excel, vous devez utiliser le xlutils module (Merci Oliver)

Voici la bonne façon de le faire:

#xlrd, xlutils and xlwt modules need to be installed.  
#Can be done via pip install <module>
from xlrd import open_workbook
from xlutils.copy import copy

rb = open_workbook("names.xls")
wb = copy(rb)

s = wb.get_sheet(0)
s.write(0,0,'A1')
wb.save('names.xls')

ceci remplace le contenu de la cellule située à a1 dans la première feuille de "noms.xls" avec le texte "a1", puis enregistre le document.

43
répondu Jack Pettersson 2015-07-30 19:28:21

Voici une autre façon de faire le code ci-dessus en utilisant le openpyxl module compatible avec xlsx. D'après ce que j'ai vu jusqu'à présent, il continue aussi de formater.

from openpyxl import load_workbook
wb = load_workbook('names.xlxs')
ws = wb['SheetName']
ws['A1'] = 'A1'
wb.save('names.xlxs')
9
répondu Noah 2018-06-20 17:25:45