2014-11-16 6 views
19

Im documentation für xlrd und xlwt ich gelernt habe, wie folgt vor:bearbeiten bestehende Excel-Arbeitsmappen und Blätter mit xlrd und xlwt

Wie aus bestehenden Arbeitsmappen/Blätter lesen:

from xlrd import open_workbook 
wb = open_workbook("ex.xls") 
s = wb.sheet_by_index(0) 
print s.cell(0,0).value 
#Prints contents of cell at location a1 in the first sheet in the document called ex.xls 

Wie neue Arbeits Bücher/Blätter erstellen:

from xlwt import Workbook 
wb = Workbook() 
Sheet1 = wb.add_sheet('Sheet1') 
Sheet1.write(0,0,'Hello') 
wb.save('ex.xls') 
#Creates a document called ex.xls with a worksheet called "Sheet1" and writes "Hello" to the cell located at a1 

Was ich jetzt tun möchte, ist ein vorhandenes Arbeitsblatt zu öffnen, in einer vorhandenen Arbeitsmappe und schreiben dieses Blatt.

Ich habe versucht, so etwas wie:

from xlwt import open_workbook 
wb = open_workbook("ex.xls") 
s = wb.sheet_by_index(0) 
print s.cell(0,0).value 

aber open_workbook ist nur ein Teil des xlrd Modul, nicht xlwt.

Irgendwelche Ideen?

Edit1: Nach Olivers Vorschlag, den ich in xlutils sah und versuchte, die folgenden:

from xlrd import open_workbook 
from xlwt import Workbook 
from xlutils.copy import copy 

wb = open_workbook("names.xls") 
s = wb.get_sheet(0) 
s.write(0,0,'A1') 
wb.save('names.xls') 

Dies jedoch gibt mir die folgende Fehlermeldung:

File "C:\Python27\lib\site-packages\xlrd\book.py", line 655, in get_sheet 
raise XLRDError("Can't load sheets after releasing resources.") 
xlrd.biffh.XLRDError: Can't load sheets after releasing resources. 

Edit 2: Die Fehlermeldung war aufgrund der unsachgemäßen Verwendung der get_sheet Funktion. Schließlich fanden heraus, wie es zu benutzen:

from xlrd import open_workbook 
from xlwt import Workbook 
from xlutils.copy import copy 

rb = open_workbook("names.xls") 
wb = copy(rb) 

s = wb.get_sheet(0) 
s.write(0,0,'A1') 
wb.save('names.xls') 
+0

Haben Sie sich die 'xlutils' angesehen, die vom selben Autor erstellt wurden und in dem Dokument dokumentiert sind, zu dem Sie verlinken? Im zweiten Unterabschnitt der "Excel-Dateien schreiben" wird geschrieben, dass "Worksheets Worksheets mit der Methode add_sheet der Workbook-Klasse erstellt werden. Um ein vorhandenes Blatt aus einer Arbeitsmappe abzurufen, verwenden Sie die Methode get_sheet. Diese Methode ist besonders nützlich, wenn die Arbeitsmappe von xlutils.copy instanziiert wurde. ' –

+0

Hallo Oliver, und danke für den Rat. Ich schaute in 'xlutils' und es scheint genau das zu sein, wonach ich suche. Ich kann immer noch nicht mein Ziel erreichen. Wenn ich 'get_sheet()' 'verwende bekomme ich die folgende Fehlermeldung: ' Datei "C: \ Python27 \ lib \ site-packages \ xlrd \ book.py ", Zeile 655, in get_sheet raise XLRDError (" Blätter können nach Freigabe von Ressourcen nicht geladen werden. ") xlrd.biffh.XLRDError: Blätter können nach Freigabe von Ressourcen nicht geladen werden. –

+0

Danke, weil Sie auch den Import bereitstellen Klausel in Ihrem Code (es fehlt oft) – geekobi

Antwort

39

Wie ich in den Änderungen des op schrieb, bestehende Excel-Dokumente bearbeiten Sie das xlutils Modul (Danke Oliver)

Hier ist die richtige Art und Weise verwenden müssen es zu tun:

#xlrd, xlutils and xlwt modules need to be installed. 
#Can be done via pip install <module> 
from xlrd import open_workbook 
from xlutils.copy import copy 

rb = open_workbook("names.xls") 
wb = copy(rb) 

s = wb.get_sheet(0) 
s.write(0,0,'A1') 
wb.save('names.xls') 

Dies ersetzt den Inhalt der Zelle bei a1 in dem ersten Blatt „names.xls“ mit dem Text „a1“ befindet, und speichert dann das Dokument.

+0

Froh, dass Sie es selbst gefunden haben. Vergessen Sie nicht, Ihre eigene Antwort zu akzeptieren ;-) –

+0

Wird tun. Nochmals vielen Dank für die Hilfe :) –

+6

Danke, aber diese Lösung funktioniert nur Für xls-Format habe ich versucht, dies für xlsx-Format verwenden, aber das verdirbt die Datei.glücklicherweise hatte ich ein Backup der Datei, so dass ich dieses Risiko eingehen könnte, aber für diejenigen, die nicht, stellen Sie sicher, dass Sie xls-Format verwenden. – BajajG

5

Hier ist eine andere Möglichkeit, den obigen Code mit dem openpyxl Modul, das mit xlsx und xlsm kompatibel ist, zu tun. Von dem, was ich bisher gesehen habe, behält es auch die Formatierung bei.

from openpyxl import load_workbook 
wb = load_workbook('names.xlxs') 
ws = wb['SheetName'] 
ws['A1'] = 'A1' 
wb.save('names.xlxs') 
+0

Wie oben erwähnt, werden Ihre Arbeitsmappen in der neuen/bearbeiteten Arbeitsmappe nicht angezeigt, wenn sie in der Arbeitsmappe enthalten sind. –

+0

Scheint zu arbeiten xlsx, aber zumindest für mich, es zerstört xlsm irreparabel. – Mathematician