2010-04-27 19 views
51

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.escribiendo en el libro existente usando xlwt

Respuesta

-38

I am unable to find examples where xlwt is used to write into existing files.

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) " save "(que elimina el archivo existente y lo reemplaza con un nuevo archivo) o" save as "(que escribe un nuevo archivo y no modifica el archivo existente).

I told you this hace cerca de 12 horas, pero aquí está de nuevo:

Visita this summary site.

Puntos de interés:

  1. xlutils paquete

  2. tutorial sobre XLRD, xlwt y xlutils ... contiene ejemplos/lista de correo

  3. google-grupo de hacer preguntas como esta (ayuda a haber trabajado en el tutorial primero)

+0

Gracias. V informativo y quise decir antes - los enlaces son muy útiles. –

+0

aceptando - sí. upvote, no se dio cuenta hasta ahora - THX no parece xlutils.copy La función() para preservar las hojas de trabajo con las tablas dinámicas. ¿Hay alguna solución? –

+0

ya he respondido a su pregunta sobre las tablas dinámicas: Nº –

18

Necesita xlutils.copy. Intentar 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 se puede sobrescribir las células de forma predeterminada como se señala en this question.

+0

me sale un error: AttributeError: objeto 'str' no tiene atributo 'formatting_info '¿Sabes por qué esto es así? – Josh

+0

¿Al ejecutar el fragmento de arriba? Publica tu código – ktdrv

218

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]) 
+57

esto debería haber sido aceptada la respuesta – chefsmart

+2

Gracias. Esta es una respuesta muy útil. – Jubbles

+47

@chefsmart Sí, debería haber sido. Además, Greg respondió sin ser un idiota. 1 ¿No – RaytheonLiszt

5

El ejemplo de 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') 

Tendrá que crear book1.xls para poner a prueba, pero se entiende la idea.

2

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 "instalación de pip" sin problemas en mi casa de Python.

La segunda xlwt necesitaba decir "pip install xlwt-future" para ser compatible.

La 3ra uno xlutils no tiene soporte para Python 3, pero adaptado un poco y ahora se trabaja por lo menos para la escritura ficticia:

#!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) 

Os adjunto el archivo aquí: http://ifolder.su/43507580

Escriba a [email protected] si se venció.

P.S .: Algunas funciones no son llamados en el ejemplo ficticio, así que tal vez van a necesitar para una adaptación también. Quién quiere hacerlo, arregle las excepciones una a una con ayuda de google. No es una tarea muy difícil, debido a que el código de paquete es pequeño ...

-1

I 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)

+0

Aunque este código podría resolver el problema, siempre debe explicar lo que hace y por qué lo ayuda. – BDL

Cuestiones relacionadas