Я использую последнюю версию 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 г., касающийся похожая проблема, которая, похоже, не решена.
x
, пока я не перепишу его для этого - person Mark Baker   schedule 08.04.2015