2013-09-24 6 views
1

Я пытаюсь извлечь вкладки из сотен созданных SAS файлов .xls. Я попробовал следующий подход без везения. Моя версия xlrd - 0.9.2.Python read SAS сгенерированный XML-файл .xls

import xlrd 
book = xlrd.open_workbook('out_1.xls') 

Сообщение об ошибке:

Traceback (most recent call last):[Finished in 0.2s with exit code 1] 
    File "I:\Dropbox\Sas data\sacwin\test.py", line 3, in <module> 
    book = xlrd.open_workbook('out_1.xls') # Open an .xls file 
    File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 435, in open_workbook 
    ragged_rows=ragged_rows, 
    File "C:\Python27\lib\site-packages\xlrd\book.py", line 91, in open_workbook_xls 
    biff_version = bk.getbof(XL_WORKBOOK_GLOBALS) 
    File "C:\Python27\lib\site-packages\xlrd\book.py", line 1258, in getbof 
    bof_error('Expected BOF record; found %r' % self.mem[savpos:savpos+8]) 
    File "C:\Python27\lib\site-packages\xlrd\book.py", line 1252, in bof_error 
    raise XLRDError('Unsupported format, or corrupt file: ' + msg) 
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found '<?xml ve' 

После того, как я открыл файл .xls в редакторе заголовок выглядит так:

<?xml version="1.0" encoding="windows-1252"?> 

<?mso-application progid="Excel.Sheet"?> 
<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"> 
<DocumentProperties xmlns="urn:schemas-microsoft-com:office"> 

Не могли бы вы дать мне несколько советов о том, как проанализировать эти файлы? Благодаря!

ответ

1

Я также ищу решение этой проблемы. Я могу сказать вам, что формат файла - xml, но формат Excel 2007 'Office Open XML (ECMA-376)' (я думаю, что это SpreadsheetML), поэтому он не поддерживается xlrd.

Если нет библиотеки python, и у вас есть хорошее знание структуры файлов, которые вам нужно обработать, я бы просто использовал xml-ридер.

С уважением Dave