2011-07-21 91 views
12

Tengo un archivo .xlsx para editar, encontré que openpyxl podría manipular archivos de Excel 2007. Solo quiero cambiar el valor en algunas celdas y no modificar otras configuraciones.Utilice openpyxl para editar un archivo Excel2007 (.xlsx) sin cambiar sus propios estilos?

Pero después de pasar por el Documentation, no puedo encontrar los ejemplos para editar un archivo existente. Solo demostró leer un archivo .xlsx y escribir en uno nuevo.

me trataron a continuación forma de editar un archivo existente, pero después de lo guardé, los estilos en el archivo ha sido eliminado (como fuentes, colores):

from openpyxl.reader.excel import load_workbook 
wb=load_workbook(r'd:\foo1.xlsx') 
ws=wb.get_sheet_by_name('Bar') 
ws.cell('A1').value= 'new_value' 
# save the workbook to a new file to finish the editing 
# but the style settings has been removed (such like font, color) in the new file 
wb.save(r'd:\foo2.xlsx') 

Respuesta

13

Ahora, openpyxl no puede manejar los estilos lo suficientemente bien, así que traté de usar el COM de pywin32 y obtuve la solución. Aquí es un buen python-excel-mini-cookbook utilizar pywin32 COM para Excel

+3

¡Buen enlace! Si alguna vez se desconecta, aquí hay una esencia con el mismo contenido: https://gist.github.com/airstrike/5469478 –

1

Estilos no son totalmente compatibles sin embargo, en openpyxl. Asegúrese de estar utilizando el latest version (1.5.3 a partir de ahora), ya que mejoró recientemente sus capacidades de estilo.

El xlwt tiene un formato más completo para los archivos .xls, pero aún no es compatible con xlsx.

+0

Sí, estoy usando v1.5.3, por lo que parece que no hay una buena manera en este momento. ¿Funcionaría 'COM with pywin32'? – Xiao

+1

COM supuestamente funciona, y utiliza la interfaz nativa de la oficina. No lo he probado, ya que solo funciona en Windows. ¡Suerte con ello! –

+0

¿Los estilos pueden mantenerse después de actualizar la columna con la nueva versión? – conandor

-3

Pruebe el siguiente código de la creación de una instancia de la clase siguiente:

de load_workbook importación openpyxl

clase para gestionar los datos de Excel con openpyxl

class Copy_excel: 
def __init__(self,src): 
    self.wb = load_workbook(src) 
    self.ws = self.wb.get_sheet_by_name("Sheet1") 
    self.dest="destination.xlsx" 

#Write the value in the cell defined by row_dest+column_dest   
def write_workbook(self,row_dest,column_dest,value): 
    c = self.ws.cell(row = row_dest, column = column_dest) 
    c.value = value 

#Save excel file 
def save_excel(self) : 
    self.wb.save(self.dest) 

¡Nunca te rindas!

+0

Esto no responde la pregunta. – matt2000

+0

Sí, con esta clase puede editar un archivo de Excel sin cambiar el estilo de la hoja – Heisenberg

Cuestiones relacionadas