2010-04-27 11 views
51

Non riesco a trovare esempi in cui xlwt viene utilizzato per scrivere in file esistenti. Ho un file xls esistente su cui ho bisogno di scrivere. Quando uso xlrd per leggere il file, non riesco a capire come trasformare il tipo di "libro" restituito in un xlwt.Workbook. Apprezzerei se qualcuno potesse indicarmi un esempio.scrittura su cartella di lavoro esistente utilizzando xlwt

risposta

-38

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

Non ci sono esempi. Non è possibile. Non con xlwt, né con altri software. La struttura del file XLS è complicata e non si comporta come un database a cui è possibile aggiungere righe in una tabella di propria scelta.

Qualsiasi software utilizzi deve fare come un utente con una copia di Excel e una tastiera: (1) "apri il file", ad esempio carica il contenuto nella memoria (2) manipola le informazioni in memoria (3) " salva "(che cancella il file esistente e lo sostituisce con un nuovo file) o" salva come "(che scrive un nuovo file e lascia il file esistente invariato).

I told you this circa 12 ore fa, ma qui è ancora una volta:

Visita this summary site.

Punti di interesse:

  1. pacchetto xlutils

  2. tutorial su XLRD, xlwt, e xlutils ... contiene esempi

  3. google-group/mailing-list per fare domande come questa (aiuta ad aver lavorato prima attraverso il tutorial)

+0

Grazie. V informativo e volevo dire prima - i collegamenti sono molto utili. –

+0

accettando - sì. upvote, non l'ho notato fino ad ora - thx La funzione xlutils.copy() non sembra conservare alcun foglio di lavoro con tabelle pivot. C'è una soluzione? –

+0

Ho già risposto alla tua domanda su tabelle pivot: No. –

18

È necessario xlutils.copy. Provare qualcosa di simile:

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

Non dimenticare che non è possibile sovrascrivere le celle di default come indicato in this question.

+0

ottengo un errore: AttributeError: oggetto 'str' non ha alcun attributo 'formatting_info "Sai perché è così? – Josh

+0

Quando si esegue lo snippet sopra? Pubblica il tuo codice. – ktdrv

218

Ecco alcuni esempi di codice che ho usato di recente per fare proprio questo.

Apre una cartella di lavoro, scende le righe, se viene soddisfatta una condizione, scrive alcuni dati nella riga. Finalmente salva il file modificato.

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

questa dovrebbe essere la risposta accettata – chefsmart

+2

Grazie. Questa è una risposta molto utile. – Jubbles

+47

@chefsmart Yup, avrebbe dovuto essere. Inoltre, Greg ha risposto senza essere un coglione. +1 – RaytheonLiszt

5

L'esempio di codice è esattamente questo:

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

È necessario creare Book1.xls alla prova, ma si ottiene l'idea.

2

Ho avuto lo stesso problema. Il mio cliente mi ha ordinato lo script Python 3.4 che aggiorna i file XLS (non XLSX) di Excel.

Il primo pacchetto xlrd è stato installato da "pip install" senza problemi nella mia home di Python.

Il 2o xlwt doveva dire "pip install xlwt-future" per essere compatibile.

la 3 xlutils non ha il supporto per Python 3, ma ho adattato un po 'e ora funziona, almeno per lo script dummy:

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

Ho attaccato il file qui: http://ifolder.su/43507580

Scrivi a [email protected] se è scaduto.

P.S .: Alcune funzioni non vengono chiamate nell'esempio fittizio, quindi forse avranno bisogno anche di un adattamento. Chi vuole farlo, risolve le eccezioni una ad una con un aiuto di google. Non è un compito molto difficile, perché il codice del pacchetto è piccolo ...

-1

ho 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

Sebbene questo codice possa risolvere il problema, è necessario spiegare sempre che cosa fa e perché aiuta. – BDL

Problemi correlati