2013年10月6日 星期日

以PHP讀寫Excel檔案

以PHP讀寫Excel檔案



http://phpexcel.codeplex.com/

用google找了一下,PHPExcel類別的功能非常強大,支援各版本的Excel檔案、CSV、HTML及PDF檔案的讀寫,有這方面的需求,改用這套工具可以省卻不少自行撰寫工具的時間,對使用者來說,Excel檔案的親和性比起CSV檔案來說,好太多了,所以決定使用Excel作為報表讀取檔案。



文章起頭的網址是PHPExcel的官網,從官網下載套件後,下載套件內的說明文件非常詳盡,花一二天就可以讀懂,使用上並不困難,只是要花時間熟悉使用方法。



PHPExcel的安裝

解壓縮下載的套件後,將Class目錄放到類別目錄下。



PHPExcel的使用

require Class/PHPExcel.php後,PHPExcel會自動載入需要的所有類別,不需作後續設定。



PHPExcel的設計哲學

物件分成三大區塊

1)Excel檔的操控--針對Excel2007版本的Excel進行操控,所有操控都在記憶體中進行,檔案的寫入及讀取由其他物件負責。

2)Excel檔的讀取--包含各版本Excel、PDF、CSV等

3)Excel檔的寫入--包含各版本Excel、PDF、CSV等



讀取Excel檔案的操件方法

1)由PHPExcel決定載入檔案的種類,如Excel版本,而不硬性設定。



1.$reader = PHPExcel_IOFactory::load('excel檔');





2)由PHPExcel決定載入檔案的種類,不硬性設定讀取的檔案種類,但將檔案設定為唯讀屬性。



1.$reader= PHPExcel_IOFactory::createReaderForFile('excel檔');
2.$reader->setReadDataOnly(true);
3.$excel= $reader->load('excel檔');





讀取某一格的Excel內容

column由0開始

row由1開始



1.$sheet=$excel->getActiveSheet();
2.$sheet->getCell('A8')
3.->getValue();







1.$sheet=$excel->getActiveSheet();
2.$sheet->getCellByColumnAndRow(2,8)
3.getValue();





取得公式計算後的結果



1.$sheet=$excel->getActiveSheet();
2.$sheet->getCell('A8')
3.->getCalculatedValue();
 




循序讀取cell的內容



01.<?php
02.$objReader = PHPExcel_IOFactory::createReader('Excel2007');
03.$objReader->setReadDataOnly(true);
04.$objPHPExcel = $objReader->load("test.xlsx");
05.$objWorksheet = $objPHPExcel->getActiveSheet();
06.echo '<table>' . "\n";
07.foreach ($objWorksheet->getRowIterator() as $row) {
08. echo '<tr>' . "\n";
09.$cellIterator = $row->getCellIterator();
10. $cellIterator->setIterateOnlyExistingCells(false); // This loops all cells,
11. // even if it is not set.
12. // By default, only cells
13. // that are set will be
14. // iterated.
15. foreach ($cellIterator as $cell) {
16. echo '<td>' . $cell->getValue() . '</td>' . "\n";
17. }
18.echo '</tr>' . "\n";
19.}
20.echo '</table>' . "\n";
21.?>







01.<?php
02.$objReader = PHPExcel_IOFactory::createReader('Excel2007');
03.$objReader->setReadDataOnly(true);
04.$objPHPExcel = $objReader->load("test.xlsx");
05.$objWorksheet = $objPHPExcel->getActiveSheet();
06.$highestRow = $objWorksheet->getHighestRow(); // e.g. 10
07.$highestColumn = $objWorksheet->getHighestColumn(); // e.g 'F'
08.$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); // e.g. 5
09.echo '<table>' . "\n";
10.for ($row = 1; $row <= $highestRow; ++$row) {
11. echo '<tr>' . "\n";
12.for ($col = 0; $col <= $highestColumnIndex; ++$col) {
13. echo '<td>' . $objWorksheet->getCellByColumnAndRow($col, $row)->getValue() . '</td>' . "\n";
14. }
15.echo '</tr>' . "\n";
16.}
17.echo '</table>' . "\n";
18.?>





設定使用第幾個活頁簿(index從0開始)



1.setActiveSheetIndex(0);





使用流程
1)讀取Excel檔案或創建Excel檔案
2)解析並操控Excel檔案
3)將記憶體中的Excel轉換成其他的型態

沒有留言:

張貼留言