2010-04-27 20 views
51

Ich kann keine Beispiele finden, wo xlwt verwendet wird, um in vorhandene Dateien zu schreiben. Ich habe eine vorhandene xls-Datei, die ich schreiben muss. Wenn ich xlrd verwende, um die Datei zu lesen, kann ich nicht herausfinden, wie man den Typ "Book", der in ein xlwt.Workbook zurückgegeben wird, transformiert. Ich würde mich freuen, wenn mir jemand ein Beispiel geben könnte.Schreiben in vorhandene Arbeitsmappe mit xlwt

Antwort

-38

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

Es gibt keine Beispiele. Es ist nicht möglich. Nicht mit xlwt, noch mit irgendeiner anderen Software. Die XLS-Dateistruktur ist kompliziert und verhält sich nicht wie eine Datenbank, an die Sie Zeilen in einer Tabelle Ihrer Wahl anhängen können.

Egal welche Software Sie verwenden, müssen Sie wie ein Benutzer mit einer Kopie von Excel und einer Tastatur machen: (1) "Öffnen Sie die Datei" dh laden Sie den Inhalt in den Speicher (2) manipulieren Sie die In-Memory-Informationen (3) " Speichern "(wodurch die vorhandene Datei weggeblasen und durch eine neue Datei ersetzt wird) oder" Speichern unter "(die eine neue Datei schreibt und die vorhandene Datei unverändert lässt).

I told you this etwa 12 Stunden, aber hier ist es wieder soweit:

Besuche this summary site.

Points of Interest:

  1. xlutils Paket

  2. Tutorial auf xlrd, xlwt und xlutils ... enthält Beispiele

  3. google-Gruppe/Mailing-Liste für Fragen wie diese zu stellen (hilft, zuerst das Tutorial durchgearbeitet zu haben)

+0

Danke. V informativ und ich wollte früher sagen - die Links sind sehr nützlich. –

+0

akzeptiert - ja. upvote, habe ich bis jetzt nicht bemerkt - thx Die Funktion xlutils.copy() scheint keine Arbeitsblätter mit Pivot-Tabellen zu erhalten. Gibt es eine Problemumgehung? –

+0

Ich habe bereits Ihre Frage zu Pivot-Tischen beantwortet: Nr. –

18

Sie benötigen xlutils.copy. so etwas wie dieses versuchen:

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

Beachten Sie nicht Zellen standardmäßig in this question wie bereits erwähnt überschreiben können.

+0

openpyxl Ich erhalte eine Fehlermeldung: Attribute: 'str' Objekt kein Attribut ‚hat formatting_info Weißt du, warum das so ist? – Josh

+0

Wenn das obige Snippet ausgeführt wird? Sende deinen Code. – ktdrv

218

Hier ist ein Beispielcode, den ich kürzlich verwendet habe, um genau das zu tun.

Es öffnet eine Arbeitsmappe, geht die Zeilen nach unten, wenn eine Bedingung erfüllt ist, schreibt es einige Daten in der Zeile. Schließlich speichert es die geänderte Datei.

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

sollte dies die angenommene Antwort gewesen sein – chefsmart

+2

Danke. Dies ist eine sehr hilfreiche Antwort. – Jubbles

+47

@chefsmart Yup, sollte es gewesen sein. Greg antwortete auch ohne einen Schwanz zu haben. +1 – RaytheonLiszt

5

Das Codebeispiel ist genau das:

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

Sie werden book1.xls erstellen müssen zu testen, aber Sie bekommen die Idee.

2

Ich hatte das gleiche Problem. Mein Kunde bestellte mir Python 3.4-Skript, das XLS (nicht XLSX) Excel-Dateien aktualisiert.

Das 1. Paket xlrd wurde von "pip install" ohne Probleme in meinem Python Home installiert.

Die zweite xlwt musste "pip install xlwt-future" sagen, um kompatibel zu sein.

der 3. ein xlutils hat keine Unterstützung für Python 3, aber ich es ein wenig angepasst und jetzt funktioniert es zumindest für Dummy-Skript:

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

ich die Datei hier angehängt: http://ifolder.su/43507580

Schreiben Sie an [email protected], wenn es abgelaufen ist.

S.S .: Einige Funktionen werden im Dummy-Beispiel nicht aufgerufen, also werden sie vielleicht auch für eine Anpassung benötigt. Wer es machen will, behebt Ausnahmen einzeln mit einer Google-Hilfe. Es ist nicht eine sehr schwierige Aufgabe, weil der Paketcode klein ist ...

-1

I

# -*- 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

Obwohl dieser Code das Problem lösen könnte, sollten Sie immer erklären, was es tut und warum es hilft. – BDL

Verwandte Themen