2015-07-03 9 views
6

.xls dosyalarını işlemek için xlrd kullanıyorum ve .xlsx dosyalarını işlemek için openpyxl kullanıyorum ve bu iyi çalışıyor.İlk olarak .xls dosya uzantısına sahip olan bir xlsx Python'da nasıl yüklenir?

Sonra bir .xls dosyası görünüşte ne elimi, bu yüzden xlrd.open_workbook() deneyin ve alıyorum:

XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '<?xml ve' 

Ben this soruya bir göz atın, ben tahmin benim dosya, biten her ne kadar uzantısı .xls ile, aslında bir .xlsx olmalıdır. Ve gerçekten, bir metin editörü görüntüleyebilir:

<?xml version="1.0" encoding="UTF-8"?> 
         <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
         xmlns:x="urn:schemas-microsoft-com:office:excel" 
         xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
         xmlns:html="http://www.w3.org/TR/REC-html40"> 
: 
: 
: 

(gizlilik nedeniyle, ben bütün dosyayı açamazsınız, ama muhtemelen bizim analiz için gerekli değil).

BadZipfile: File is not a zip file 

aslında bir xls varsa (olası):

Yani ben sadece bir .xlsx bunu (cp) kopyalamak, ben openpyxl.load_workbook() ile açmak mümkün olması gerektiğini tahmin, ama olsun ancak xlrd ile açılamaz ve eğer xlsx ise ancak openpyxl ile açılamıyorsa, cp bir .xlsx'e sonra bile ne yapmalı?

Not: Excel'de .xls açarsanız, bir .xlsx olarak kaydedin ve openpyxl ile denenecek, iyi yük, ancak bu kılavuzu adım ben yürütülmesinde olacak bir lüks değil benim programı.

+0

Ne xlrd verson kaçıyorsun? – James

+0

xlrd 0.9.3 OS X üzerinde – Pyderman

+1

Bir dosya, hangi excel ile orijinal xls arasında farklılık gösterir? Belki de fark, –

cevap

8

Tek bir şey açık: Açmaya çalıştığınız dosya uzantısının önerdiğinden farklı bir biçime sahip.

Bildiğiniz gibi, Excel dosya biçimleri (ancak bunlarla sınırlı olmamak üzere) xls ve xlsx içerir.

  • Excel 2003 biçimi (xls) bir ikili biçimdir. Bu, bir metin editörü ile bir xls dosyasını açarsanız, anlamsız göreceksiniz demektir.

  • Excel 2007 biçimi (xlsx) oldukça farklı. Bir xlsx dosyası, içinde bir grup XML dosyası bulunan bir zip dosyasıdır. xlsx dosyasının içeriğini ayıklamak için bir zip arşivleyicisi kullanabilirsiniz. Daha sonra, herhangi bir metin editörü kullanarak XML dosyalarını düzenleyebilirsiniz. Ancak, bir metin düzenleyicisiyle doğrudan bir xlsx dosyasını açmak, bir metin düzenleyicisiyle bir zip dosyasını açmak gibidir: Sadece anlamsız görürsünüz.

Eğer bir metin editörü ile dosyayı açmak (ve içeriğini okuyun) gerçeği bir xls dosya ne de xlsx dosya ne olduğunu gösteriyor. Dosyanız ne ikili dosya ne de zip dosyası değil, düz XML dosyası. Ayrıca, bu hata iletisi çok fazla şey ifade etmektedir.

BadZipfile: File is not a zip file 

O openpyxl bir xlsx dosyası ve bu nedenle zip dosyası olarak dosyayı açmaya çalışırken demektir.Ancak, içeriğini çıkarmaya çalıştığında, başarısız olur, çünkü dosyanız bile bir zip dosyası değildir.

Ancak dosya ne xlsx dosya ne de bir xls dosya, Microsoft Excel'in nasıl okuyabilir? Ben de bunu merak ettim. Bazı araştırmalardan sonra dosyanızın XML Spreadsheet 2003 file format olduğuna inanıyorum. This example, gönderdiğiniz dosya içeriğine çok benziyor. Microsoft Excel bu formatı desteklediğinden, dosyanızı okuyabileceğine şaşmamalı.

Maalesef bu tür xlrd ve openpyxl olarak Python kütüphaneleri sadece xls ve xlsx dosya formatlarını destekler ve bu nedenle dosyanızı okumak mümkün olmayacaktır. Sanırım onu ​​sadece desteklenen bir biçime dönüştürmeniz gerekecek.

+0

Mükemmel cevap ver, ve ben senin argümanlarına direndiğim sürece yumruklamayan yorumlarımı kullandın. Teşekkür ederim. Yığın Taşması sorusuna model yanıtı. – Pyderman

2

OSX'de değilim, bu nedenle test edilmiyor. Destek eksikliğine rağmen, hatalı dosyayı açmak ve yeniden kaydetmek için appscript paketini kullanabilirsiniz.

from appscript import * 
excel = app('Microsoft Excel') 
wb = excel.open('/path/to/file.xls') 
wb.save_as('/path/to/fileout.xlsx', file_format=k.XLSX_file_format) 
#not sure the exact name of k.excel_file 
+0

İlginç. Bu paketin farkında değildi. Teşekkürler. – Pyderman

+0

İyi bir çözüm, ancak Microsoft Excel'in yüklü olduğu sadece OS X'de çalıştığını unutmayın. – Zenadix

+1

xlwings kitaplığı, MacOS'ta Excel ile çalışmak için bunu kullanır –

0

Benzer bir sorunla karşılaştım. Mutlak dosya yoluna ihtiyaç duyulduğu ortaya çıktı. E.g., "filename.xlsx" yerine "c: /dir/filename.xlsx". Göreli yollar osx üzerinde çalıştı, ancak Windows'da değil.

İlgili konular