2015-11-13 2 views
0

Я так много пытаюсь прочитать файл Excel, который я выскочил с веб-страницы. Он имеет тип: Microsoft Excel 97-2004 Workbook (я проверил его из MS Excel). Это то, что я пытаюсь с PHPExcel:Невозможно прочитать Excel 97-2004 Workbook

$destination = APPPATH . "docs/app.xls"; 
$inputFileType = PHPExcel_IOFactory::identify($destination); 
$objReader = PHPExcel_IOFactory::createReader($inputFileType); 
$objPHPExcel = $objReader->load($destination); 

и я получаю следующее сообщение об ошибке:

A PHP Error was encountered 

Severity: Warning 

Message: simplexml_load_file(): /var/www/application/cookies/app.xls:1: parser error : Start tag expected, '<' not found 

Filename: Reader/Excel2003XML.php 

Line Number: 333 

.... 
A PHP Error was encountered 

Severity: Warning 

Message: simplexml_load_file(): HTTP/1.1 200 OK 

Filename: Reader/Excel2003XML.php 

Line Number: 333 
... 

A PHP Error was encountered 

Severity: Warning 

Message: simplexml_load_file():^

Filename: Reader/Excel2003XML.php 

Line Number: 333 
... 

Fatal error: Call to a member function getNamespaces() on boolean in /var/www/application/third_party/PHPExcel/Reader/Excel2003XML.php on line 334 
A PHP Error was encountered 

Severity: Error 

Message: Call to a member function getNamespaces() on boolean 

Может кто-нибудь помочь мне разобраться?

+0

Похоже, что PHPExcel распознает его как формат SpreadsheetML, но, возможно, он не совсем сформирован ..... но поскольку я не вижу этот файл, я не могу сказать наверняка –

+0

@SeanBright PHPExcel работает с .xls правильно? – Fawzan

+0

@MarkBaker можно загрузить файл в некоторых местах и ​​поделиться ими? – Fawzan

ответ

2

Проблема с вашим файлом в том, что это не просто формат SpreadsheetML, он поврежден.

Открытие файла в текстовом редакторе, я могу видеть, что заголовки ответа HTTP, также включены в файл

HTTP/1.1 200 OK 
Date: Fri, 13 Nov 2015 09:55:31 GMT 
Server: Apache-Coyote/1.1 
Content-Disposition: inline; filename="sdp_daily_app_revenue_report.xls" 
Content-Type: application/vnd.ms-excel 
Transfer-Encoding: chunked 

<?xml version="1.0" encoding="UTF-8"?> 
<?mso-application progid="Excel.Sheet"?> 

<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" 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"> 
.... 
</Workbook> 

Это делает его нечитаемым ..... файл не должен содержать ничего, кроме фактической xml content

Я не знаю, как вы его приобретаете, но вам нужно убедиться, что заголовки ответов HTTP не отражены в файле. PHPExcel следует читать без проблем, если все до <?xml version="1.0" encoding="UTF-8"?> был раздели

EDIT

Это также определено без Default стиля, который является обязательным для формата SpreadsheetML .... если вы хотите, чтобы взломать код из Excel2003XML чтения немного вокруг линий 413-417, изменить

if ($styleID == 'Default') { 
    $this->styles['Default'] = array(); 
} else { 
    $this->styles[$styleID] = $this->styles['Default']; 
} 

в

$this->styles[$styleID] = (isset($this->styles['Default'])) ? $this->styles['Default'] : array(); 
+0

Спасибо, Марк, похоже, я написал заголовок ответа в файл. Я попробовал его с файлом, который вы дали, Он все еще дает мне ошибку. Сообщение: Неопределенный индекс: По умолчанию Имя файла: Reader/Excel2003XML.php Номер строки: 416 – Fawzan

Смежные вопросы