python - with - Edite hojas de trabajo y hojas de Excel existentes con xlrd y xlwt
write excel with python (2)
En la documentación para xlrd
y xlwt
aprendí lo siguiente:
Cómo leer de libros de trabajo / hojas existentes:
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
Cómo crear nuevos libros de trabajo / hojas:
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
Lo que quiero hacer ahora es abrir una hoja de trabajo existente, en un libro de trabajo existente y escribir en esa hoja.
He intentado algo como:
from xlwt import open_workbook
wb = open_workbook("ex.xls")
s = wb.sheet_by_index(0)
print s.cell(0,0).value
pero open_workbook
es solo una parte del módulo xlrd
, no xlwt
.
¿Algunas ideas?
Edit1: después de la sugerencia de Olivers busqué en xlutils
e intenté lo siguiente:
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'')
Sin embargo, esto me da el siguiente mensaje de error:
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.
Editar 2: el mensaje de error se debió al uso incorrecto de la función get_sheet
. Finalmente descubrió cómo usarlo:
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'')
Como escribí en las ediciones de la op, para editar los documentos existentes de Excel debes usar el módulo xlutils
(Gracias Oliver)
Esta es la forma correcta de hacerlo:
#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'')
Esto reemplaza el contenido de la celda ubicada en a1 en la primera hoja de "names.xls" con el texto "a1", y luego guarda el documento.
Aquí hay otra forma de hacer el código anterior usando el módulo openpyxl
que es compatible con xlsx y xlsm. Por lo que he visto hasta ahora, también sigue formateando.
from openpyxl import load_workbook
wb = load_workbook(''names.xlxs'')
ws = wb[''SheetName'']
ws[''A1''] = ''A1''
wb.save(''names.xlxs'')