É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')
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.
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')