PHPExcel

官方網站:http://phpexcel.codeplex.com/

用來讀取、產生 Excel 的 PHP class。

下載回來後解壓縮 Classes,在要使用的 PHP 檔案中 include。

產生 Excel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// include PHPExcel 相關檔案
include("includes/PHPExcel.php");
include("includes/PHPExcel/Writer/Excel2007.php"); // Excel 2007 格式
include("includes/PHPExcel/IOFactory.php"); // 放置圖片

error_reporting(E_ALL);

$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);

// 指定儲存格的內容,中文要用 iconv() 轉換,不然會顯示不出來
$objPHPExcel->getActiveSheet()->setCellValue('A1', iconv("big5", "utf-8", "測試"));

// 也可以用指定 column 跟 row 的方式設定內容,column 是從 0 開始編號,row 是從 1 開始編號
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow(0, 1, iconv('big5', 'utf-8', '哈囉'));

// 自動設定欄寬
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);

// 在 Excel 中放圖片
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('cat'); // 圖片名稱
$objDrawing->setDescription('cat'); // 圖片描述
$objDrawing->setPath('cat.jpg'); // 圖片檔案路徑,支援JPG及PNG格式
$objDrawing->setWidth(1000); // 圖片寬
$objDrawing->setCoordinates("A2"); // 圖片放置的儲存格位置
$objDrawing->setOffsetX(30); // X偏移量
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());

// 儲存 Excel 檔,這裡會存成 .xlsx 格式
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
$objWriter->save(str_replace('.php', '.xlsx', __FILE__)); // Excel 檔案路徑

讀取 Excel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
include('includes/PHPExcel/IOFactory.php');

// read excel
$filename = "test.xlsx";
$objPHPExcel = PHPExcel_IOFactory::createReader('Excel5'); // 與舊版相容
$objPHPExcel = PHPExcel_IOFactory::load($filename);
$objWorksheet = $objPHPExcel->getSheet(0); // 讀取第一個工作表
$data = array();

// 用 iterator 依序讀取 rows, columns, 並將資料存到 $data
foreach ( $objWorksheet->getRowIterator() as $rowidx => $row ) {
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false); // 讀入整行, 若為空回傳 null
foreach ( $cellIterator as $cellidx => $cell ) {
$data[$rowidx][$cellidx] = $cell->getValue();
}
}