Файл не читается с помощью Excelwriter и phpExcelReader 2

Я использую Excel Writer из Harish Chauhan для создания файла excel (xls).

Затем я использую phpExcelReader 2, чтобы прочитать файл, созданный классом Excel Writer, но постоянно вижу эту ошибку:

The filename myXls.xls is not readable

Я могу открыть файл "myXls.xls" в MS Excel. Но если я сохраню файл под другим именем, он может быть успешно прочитан.

Попробуйте изучить код, похоже, что ошибка была дана:

if (substr($this->data, 0, 8) != IDENTIFIER_OLE) {
    //echo 'Error';
    $this->error = 1;
    return false;
}

IDENTIFIER_OLE был определен:

define('IDENTIFIER_OLE', pack("CCCCCCCC",0xd0,0xcf,0x11,0xe0,0xa1,0xb1,0x1a,0xe1));

Я понятия не имею о том, как это исправить. Пожалуйста помоги.

Спасибо за ваше время!

2 ответа

Решение

Файл, сгенерированный классом ExcelWriter Хариша Чаухана, не является реальным файлом.xls OLE BIFF, но представляет собой смесь разметки HTML и некоторых элементов из SpreadSheetML, формата XML, определенного Microsoft как альтернатива BIFF в Excel 2003. Он никогда не оказывался особенно популярным; но более поздние версии самого MS Excel все еще могут читать и записывать этот формат. MS Excel также очень простит чтение HTML-разметки, хотя в последней версии вы получите уведомление о том, что формат файла не соответствует его расширению.

phpExcelReader 2 предназначен для чтения файлов Excel BIFF, поэтому он не способен читать файлы не OLE/ не BIFF, сгенерированные классом Хариша Чаухана.

Если вы хотите писать и читать файлы в правильном формате, я предлагаю вам использовать PHPExcel или одну из многих других библиотек PHP, которые работают с подлинными файлами Excel.

У меня такая же проблема. Задача состояла в том, чтобы разобрать очень старый файл XLS (Excel2). Я не мог найти библиотеку в PHP, которая работает с таким старым форматом.

Таким образом, решение состояло в том, чтобы сделать преобразование с помощью командной строки LibreOffice в XLSX (работает и в CSV), а затем проанализировать его с помощью любого анализатора Excel "moderner".

Мы установили LibreOffice на наш сервер, и это команда для преобразования:

libreoffice --headless --convert-to xlsx original_source.xls

или же

libreoffice --headless --convert-to csv original_source.xls
Другие вопросы по тегам