Dans le documentation pour xlrd
et xlwt
, j'ai appris ce qui suit:
Comment lire des cahiers/fiches existants:
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 cahiers/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, c'est ouvrir une feuille de calcul existante, dans un classeur existant, et écrire dans 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 du module xlrd
, pas xlwt
.
Des idées?
Edit1: Après la suggestion d’Olivers, j’ai étudié xlutils
et essayé ce qui suit:
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')
Cela me donne toutefois le message d'erreur suivant:
File "C:\Python27\lib\site-packages\xlrd\book.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.
Edit 2: le message d'erreur était dû à une utilisation incorrecte du get_sheet
une fonction. Enfin découvert 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')
Comme je l'ai écrit dans les modifications de l'opération, pour modifier des documents Excel existants, vous devez utiliser le module xlutils
(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 en a1 dans la première feuille de "names.xls" par le texte "a1", puis enregistre le document.
Voici une autre façon de faire le code ci-dessus en utilisant le module openpyxl
compatible avec xlsx. D'après ce que j'ai vu jusqu'à présent, il conserve également le formatage.
from openpyxl import load_workbook
wb = load_workbook('names.xlsx')
ws = wb['SheetName']
ws['A1'] = 'A1'
wb.save('names.xlsx')