我正在使用PHPExcel的最新大師(最近提交2015年3月28日)解析客戶端的xlsx文件,下面的代碼讀取文件時沒有抱怨,但找不到數據(只是我目前得到的輸出爲NULL):PHPExcel:解析X名稱空間的XLSX文件
<?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命名空間作爲默認值或以某種方式讓它加載以這種方式定義的工作表?
在我的追問中,我發現了一個2010 1的錯誤報告,其中涉及類似的問題,但似乎沒有解決。
沒有任何方法讓PHPExcel使用直到我重寫它的'x'命名空間 –
感謝馬克,我想知道是否應該爲這些類型的電子表格寫一個新的閱讀器,而不是爲了客戶而做必要的可怕黑客攻擊,因爲時間很緊。 – Hanra091
你說得對,其中一些與MS Excel自身使用的名稱空間不同的幾個名稱空間最近出現了......我已經重寫了基於XML的讀者使用XMLReader而不是SimpleXML,作爲該工作的一部分,試圖解決命名空間問題,但進展緩慢 –