xlutils python xlwt xlrd

python - xlutils



escribiendo en el libro existente usando xlwt (6)

No puedo encontrar ejemplos donde xlwt se usa para escribir en archivos existentes. Tengo un archivo xls existente en el que debo escribir. Cuando uso xlrd para leer el archivo, no puedo entender cómo transformar el tipo "Libro" devuelto en un xlwt.Workbook. Agradecería que alguien me señale un ejemplo.


No puedo encontrar ejemplos donde xlwt se usa para escribir en archivos existentes.

No hay ejemplos No es posible. No con xlwt, ni con ningún otro software. La estructura del archivo XLS es complicada y no actúa como una base de datos a la que puede agregar filas en una tabla de su elección.

Cualquier software que use debe hacer como un usuario con una copia de Excel y un teclado: (1) "abrir el archivo", es decir, cargar los contenidos en la memoria (2) manipular la información en la memoria (3) "guardar" (que agota el archivo existente y lo reemplaza con un nuevo archivo) o "guardar como" (que escribe un nuevo archivo y deja el archivo existente sin cambios).

Te lo dije hace 12 horas, pero aquí está de nuevo:

Visite este sitio de resumen .

Puntos de interés:

  1. paquete xlutils

  2. tutorial sobre xlrd, xlwt y xlutils ... contiene ejemplos

  3. google-group / mailing-list para hacer preguntas como esta (ayuda a haber trabajado en el tutorial primero)


Aquí hay un código de muestra que utilicé recientemente para hacer justamente eso.

Abre un libro de trabajo, va por las filas, si se cumple una condición, escribe algunos datos en la fila. Finalmente guarda el archivo modificado.

from xlutils.copy import copy # http://pypi.python.org/pypi/xlutils from xlrd import open_workbook # http://pypi.python.org/pypi/xlrd from xlwt import easyxf # http://pypi.python.org/pypi/xlwt START_ROW = 297 # 0 based (subtract 1 from excel row number) col_age_november = 1 col_summer1 = 2 col_fall1 = 3 rb = open_workbook(file_path,formatting_info=True) r_sheet = rb.sheet_by_index(0) # read only copy to introspect the file wb = copy(rb) # a writable copy (I can''t read values out of this, only write to it) w_sheet = wb.get_sheet(0) # the sheet to write to within the writable copy for row_index in range(START_ROW, r_sheet.nrows): age_nov = r_sheet.cell(row_index, col_age_november).value if age_nov == 3: #If 3, then Combo I 3-4 year old for both summer1 and fall1 w_sheet.write(row_index, col_summer1, ''Combo I 3-4 year old'') w_sheet.write(row_index, col_fall1, ''Combo I 3-4 year old'') wb.save(file_path + ''.out'' + os.path.splitext(file_path)[-1])


El ejemplo del código es exactamente esto:

from xlutils.copy import copy from xlrd import * w = copy(open_workbook(''book1.xls'')) w.get_sheet(0).write(0,0,"foo") w.save(''book2.xls'')

Necesitarás crear book1.xls para probar, pero entiendes la idea.


Necesitas xlutils.copy . Pruebe algo como esto:

from xlutils.copy import copy w = copy(''book1.xls'') w.get_sheet(0).write(0,0,"foo") w.save(''book2.xls'')

Tenga en cuenta que no puede sobrescribir celdas de manera predeterminada como se indica en esta pregunta .


Yo openpyxl

# -*- coding: utf-8 -*- import openpyxl file = ''sample.xlsx'' wb = openpyxl.load_workbook(filename=file) # Seleciono la Hoja ws = wb.get_sheet_by_name(''Hoja1'') # Valores a Insertar ws[''A3''] = 42 ws[''A4''] = 142 # Escribirmos en el Fichero wb.save(file)


Yo tuve el mismo problema. Mi cliente me ordenó la secuencia de comandos Python 3.4 que actualiza los archivos de Excel XLS (no XLSX).

El primer paquete xlrd fue instalado por "pip install" sin problemas en mi casa de Python.

El segundo xlwt necesitaba decir "pip install xlwt-future" para ser compatible.

El 3er. Xlutils no tiene soporte para Python 3, pero lo adapté un poco y ahora funciona al menos para el script ficticio:

#!C:/Python343/python from xlutils.copy import copy # http://pypi.python.org/pypi/xlutils from xlrd import open_workbook # http://pypi.python.org/pypi/xlrd from xlwt import easyxf # http://pypi.python.org/pypi/xlwt file_path = ''C:/Dev/Test_upd.xls'' rb = open_workbook(''C:/Dev/Test.xls'',formatting_info=True) r_sheet = rb.sheet_by_index(0) # read only copy to introspect the file wb = copy(rb) # a writable copy (I can''t read values out of this, only write to it) w_sheet = wb.get_sheet(0) # the sheet to write to within the writable copy w_sheet.write(1, 1, ''Value'') wb.save(file_path)

Adjunté el archivo aquí: http://ifolder.su/43507580

Escriba a [email protected] si se venció.

PD: Algunas funciones no se llaman en el ejemplo ficticio, por lo que tal vez también necesiten una adaptación. Quién quiere hacerlo, arregle las excepciones una a una con ayuda de google. No es una tarea muy difícil, porque el código del paquete es pequeño ...