PHPExcel: анализ файлов XLSX с пространством имен X

Я использую последнюю версию PHPExcel (последняя фиксация 28 марта 2015 г.) для анализа файла xlsx для клиента, следующий код читает файл без жалоб, но не находит данных (единственный вывод, который я сейчас получаю, - NULL):

<?php

    include 'PHPExcel/IOFactory.php';

    $inputFileName = 'foo.xlsx';

    try {
        $objReader = PHPExcel_IOFactory::createReaderForFile($inputFileName); 
        $objPHPExcel = $objReader->load($inputFileName); 
    } catch (Exception $e) {
        print_r('Error loading file "' . pathinfo($inputFileName, 
                PATHINFO_BASENAME) . '": ' . $e->getMessage());
    }

    $sheet = $objPHPExcel->getSheetByName("Orders");

    var_dump($sheet);           

?>

Определение книги внутри файла xlsx выглядит так:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>    
    <x:workbook xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
        <x:fileVersion appName="xl" lastEdited="4" lowestEdited="4" rupBuild="4506" />
        <x:workbookPr defaultThemeVersion="124226" />
        <x:bookViews>
            <x:workbookView xWindow="480" yWindow="345" windowWidth="24495" windowHeight="11955" />
        </x:bookViews>
        <x:sheets>
            <x:sheet name="Orders" sheetId="4" r:id="relId4" />
        </x:sheets>
        <x:calcPr calcId="125725" />
</x:workbook>

Я думаю, что это не работает, что есть лист «Заказы», ​​потому что он ищет «листы» в пространстве имен по умолчанию, а не в пространстве имен «x». Извините, если терминология там немного тарабарщина, но, надеюсь, вы понимаете, что я имею в виду.

В этом листе определенно есть данные, потому что я могу открыть файл в LibreOffice и посмотреть его.

Есть ли способ заставить PHPExcel использовать пространство имен x по умолчанию или каким-либо другим способом заставить его загружать рабочие листы, определенные таким образом?

В своем стремлении выяснить это я нашел отчет об ошибке от 1 2010 г., касающийся похожая проблема, которая, похоже, не решена.


person Hanra091    schedule 08.04.2015    source источник
comment
Невозможно заставить PHPExcel использовать пространство имен x, пока я не перепишу его для этого   -  person Mark Baker    schedule 08.04.2015
comment
Спасибо, Марк, мне было интересно, стоит ли мне пойти и написать новый ридер для таких таблиц, а не делать ужасный хакер, который я должен был сделать для клиента, когда было мало времени.   -  person Hanra091    schedule 09.04.2015
comment
Вы правы, что пара из них с разными (от тех, которые используются самим MS Excel) пространствами имен возникла недавно ... Я уже переписываю основанные на XML Readers, чтобы использовать XMLReader, а не SimpleXML, который требует удивительное количество усилий и попытки решить проблемы с пространством имен как часть этой работы, но это медленный прогресс   -  person Mark Baker    schedule 09.04.2015
comment
Эта проблема отслеживается в разделе github.com/PHPOffice/PHPExcel/issues/571 - @ Марк, есть ли какой-нибудь прогресс, которым можно поделиться за последний год? :)   -  person Motin    schedule 02.05.2016


Ответы (1)