PHPExcel簡介與說明(1)

PHPExcel簡介與說明(1)-以使用者文件出發

由於個人的習慣,喜歡追根究柢的探尋可以達成的原因,而並不是只會單純使用別人寫好的套件,因此看完開發者為我們所寫的文件也是必做功課之一。
由於PHPExcel本身沒有為大家準備中文版的使用者手冊,我就來為大家簡介順便翻譯一點內容給大家。如果喜歡看英文版的,可以直接到下載好的PHPExcel>Documentation打開PHPExcel User Documentation - Reading Spreadsheet Files,來閱讀。

支援讀取的格式(電子表格)

從PHPExcel這樣的名稱我們可以知道是利用php來讀取excel形式的電子表單,但其他類似的表單亦有支援,就讓我們來看看有支援哪幾種類吧。
以下為簡單翻譯內容:

    • Excel5  微軟Excel的二位元檔案格式(BIFF5、BIFF8),用於Excel95到2003之間的版本。此格式可以被大部分電子表單的程式所支援。BIFF檔案通常為.xls檔案的延伸。關於此格式描述的文件可以參考此連結直接下載pdf檔
    • Excel2003XML  微軟Excel 2003所包含的檔案格式選項之一,被稱作SpreadsheetXML。此檔案為加壓縮過後的XML文件。
    • Excel2007  伴隨微軟Excel 2007版本而生的新檔案格式。同時,Microsoft Office Open XML SpreadsheetML和Excel 2010延伸這樣的格式更進一步有了新的功能像是sparklines。此類檔案典型檔案名稱延伸為.xlsx。這樣的格式是根據壓縮後的XML檔案。
    • OOCalc
    • SYLK
    • Gnumeric
    • CSV  Comma Separated Value的簡稱,為一種常見的用在txt格式的結構策略。在這樣的檔案中,檔案中的每一行相當於一列的資料,而不同的資料欄位(或是一行資料)之間則用逗號隔開。如果本身資料之間就存在逗號的話,通常會用""將其區隔。有時候也會用 \t 或是 來當作區隔符號而不是用逗號。
在看完上述的內容後,是不是覺得PHPExcel更加強大了呢。在自己實際使用過後,我們也可以將他當作一個簡易的轉檔工具,當有大量的檔案需要統一Excel版本時候,或許也有可以透過讀入檔案,指定一個統一的版本,進行檔案的轉換。由於是改寫自PHPExcel的範例,所以執行會顯示一些時間資訊,讓使用者更好找出bug。

<?php
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
date_default_timezone_set('Asia/Taipei');
/** Include PHPExcel */
require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
/** Include PHPExcel_IOFactory */
require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
echo date('H:i:s') ," ",__FILE__, EOL;
$objPHPExcel = new PHPExcel();
$inputFileName = "14Readtest.xls";
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
echo date('H:i:s') , " ", $inputFileType, EOL;
$callStartTime = microtime(true);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);
echo date('H:i:s') , " Write to Excel format as the Excel2007" , EOL;
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
$objWriter->save('Test.xlsx');
$callEndTime = microtime(true);
$callTime = $callEndTime - $callStartTime;
echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
// Echo memory usage
echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
// Echo memory peak usage
echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
// Echo done
echo date('H:i:s') , " Done writing file" , EOL;
echo 'File has been created in ' , getcwd() , EOL;

執行環境:Windows7 Appserv
執行設定:Classes和Examples同層,Classes下包含一個名為PHPExcel,php和一個名為PHPExcel的資料夾,此資料夾內有本次需要的php檔-IOFactory.php;Examples下則放本次的上面執行的php和需要讀取的excel檔案。
執行結果:

留言