2014-11-16 23 views
19

xlwt:Düzenleme mevcut Excel çalışma kitapları ve xlrd ile çarşaf ve <code>xlrd</code> ve ben öğrendim <code>xlwt</code> için <a href="http://www.simplistix.co.uk/presentations/python-excel.pdf">documentation</a> aşağıdaki

mevcut çalışma kitapları/sayfalarından nasıl okunmalı:

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 

Nasıl yeni iş-kitaplar/çarşaf oluşturun:

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 

Şu anda yapmak istediğim şey mevcut bir çalışma kitabında, varolan çalışma sayfasını açın ve yazmaya olan bu sayfa.

denedim gibi bir şey:

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

ama open_workbookxlrd modülün sadece bir kısmı değil, xlwt olduğunu.

Herhangi bir fikrin var mı?

Edit1: Olivers öneri sonra xlutils içine baktım ve aşağıdaki çalıştı:

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: hata mesajı Ancak bu

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

, bana aşağıdaki hata iletisini verir get_sheet işlevinin yanlış kullanımından kaynaklanıyordu.

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

Aynı yazar tarafından yapılan ve bağlandığınız aynı belgede belgelenen 'xlutils''e baktınız mı? "Excel dosyalarını yazma" nın 2. alt bölümünde, Çalışma Sayfaları sınıfının add_sheet yöntemi ile Çalışma Sayfaları Çalışma Sayfalarının oluşturulduğu yazılmıştır. Mevcut bir sayfayı bir Çalışma Kitabından almak için get_sheet yöntemini kullanın. Bu yöntem, Çalışma Kitabı xlutils.copy ile başlatıldığında özellikle yararlıdır. ' –

+0

Merhaba Oliver, ve tavsiye için teşekkürler. Ben xlutils'e baktım ve kesinlikle aradığım şey gibi görünüyor. Yine de yine de hedefimi gerçekleştiremiyorum. 'get_sheet()' ı kullandığımda aşağıdaki hata iletisini alıyorum: 'Dosya" C: \ Python27 \ lib \ site-packages \ xlrd \ book.py ", satır 655, get_heet satırında XLRDError (" Kaynaklar serbest bırakıldıktan sonra sayfa yüklenemiyor. ") xlrd.biffh.XLRDError: Kaynakları yayınladıktan sonra sayfa yüklenemiyor. ' –

+0

Ayrıca, içe aktarmayı da sağladığınız için teşekkürler kodunuzdaki fıkra (genellikle eksik) – geekobi

cevap

39

Sana xlutils modülünü (Teşekkürler Oliver) İşte

kullanmalıdır varolan excel belgeleri düzenlemek için, op düzenlemeleri yazdığı gibi uygun yoludur: Nihayet nasıl kullanılacağını öğrendim bunu yapmak için:

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

Bu "a1" metni ile "names.xls" ilk sayfasında a1 bulunan hücrenin içeriğini değiştirir ve sonra belgeyi kaydeder.

+0

sevindim yardım :) –

+0

yapacak kabul unutmayın. kendiniz bulundu, ancak bu çözüm sadece çalışır xls formatı için bunu xlsx formatı için kullanmayı denedim ama bu dosyaya zarar veriyor.Neyse ki, bu riski alabilmem için dosyanın bir yedeğini aldım, ama yapmayanlar için lütfen xls formatını kullandığınızdan emin ol. –

+6

teşekkür için tekrar teşekkürler. kendi cevabı ;-) – BajajG

5

Yukarıdaki kodu, xlsx ve xlsm ile uyumlu olan openpyxl modülünü kullanarak gerçekleştirmenin başka bir yolu. Şimdiye kadar gördüğüm kadarıyla, formatlamayı da koruyor.

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

sizin Çalışma Kitabı görüntüler içeriyorsa, bunlar yeni düzenlenebilir/çalışma kitabında korunmaz, Yukarıda belirtildiği gibi. –

+0

çalışmak gibi görünüyor xlsx, ama en azından benim için, xlsm'yi telafi edilemez şekilde bozar. – Mathematician