1. 程式人生 > >php使用phpexcel開發庫生成和讀取excel

php使用phpexcel開發庫生成和讀取excel

excel的生成和讀取在日常開發中用的很多,最基本的操作就是把資料庫裡的資料匯出為excel或者讀取excel的資料並插入到資料庫,這兩種需求是比較常見的。像java,C#可以使用POI開發庫,php中也給我們提供了這樣的第三方開發庫phpexcel,這樣php也能生成和讀取excel了

1.先下載phpexcel第三方的開發庫

2.新建一個專案並在根目錄下面建一個lib資料夾,當然也可以是別的

3.把下載的phpexcel解壓,把Classes資料夾下面的東西複製到新建的lib資料夾下面

4.使用這套開發庫生成一個簡單的excel

(1)首先引入要用到的php

require_once 'lib/PHPExcel.php';
require_once 'lib/PHPExcel/Writer/Excel2007.php';
require_once 'lib/PHPExcel/Writer/Excel5.php';
require_once 'lib/PHPExcel/IOFactory.php';

(2)生成excel文件,我這裡的資料直接寫到了數組裡,日常的開發也可能是從資料庫讀取出來

要理解phpexcel的使用最重要的是要理解清楚excel單元格的表示方法,例如B2表示第二行第二列的單元格,其他的以此類推,來看看生成excel的php程式碼

<?php

/**
 * PHPEXCEL生成excel檔案
* @desc 支援任意行列資料生成excel檔案,暫未新增單元格樣式和對齊
*/

require_once 'lib/PHPExcel.php';
require_once 'lib/PHPExcel/Writer/Excel2007.php';
require_once 'lib/PHPExcel/Writer/Excel5.php';
require_once 'lib/PHPExcel/IOFactory.php';

$fileName = "test_excel";
$headArr = array("姓名","學號","成績");
$data = array(array("蔡依林","2038010501","90"),array("潘瑋柏","2038010502","91"),array("柳下惠","2038010503","80"));
getExcel($fileName,$headArr,$data);


function getExcel($fileName,$headArr,$data){
	if(empty($data) || !is_array($data)){
		die("data must be a array");
	}
	if(empty($fileName)){
		exit;
	}
	$date = date("Y_m_d",time());
	$fileName .= "_{$date}.xlsx";

	//建立新的PHPExcel物件
	$objPHPExcel = new PHPExcel();
	$objProps = $objPHPExcel->getProperties();

	//設定表頭,從第二列開始
	$key = ord("B");
	foreach($headArr as $v){
		$colum = chr($key);
		$objPHPExcel->setActiveSheetIndex(0) ->setCellValue($colum.'1', $v);
		$key += 1;
	}

	$column = 2;
	$objActSheet = $objPHPExcel->getActiveSheet();
	//遍歷二維陣列的資料
	foreach($data as $key => $rows){ 
		$span = ord("B");
		// 列寫入
		foreach($rows as $keyName=>$value){
			$j = chr($span);
			//按照B2,C2,D2的順序逐個寫入單元格資料
			$objActSheet->setCellValue($j.$column, $value);
			//移動到當前行右邊的單元格
			$span++;
		}
		//移動到excel的下一行
		$column++;
	}

	$fileName = iconv("utf-8", "gb2312", $fileName);
	//重命名錶
	$objPHPExcel->getActiveSheet()->setTitle('Simple');
	//設定活動單指數到第一個表,所以Excel開啟這是第一個表
	$objPHPExcel->setActiveSheetIndex(0);
	
	
	$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
	//指令碼方式執行,儲存在當前目錄
	//$objWriter->save($fileName); 
	
	// 輸出文件到頁面  
	header('Content-Type: application/vnd.ms-excel');  
	header('Content-Disposition: attachment;filename="test.xls"');  
	header('Cache-Control: max-age=0');  
	$objWriter->save("php://output");  
	exit;

}

?>

生成的excel是下面這樣樣子

5.讀取xls的內容

<?php

/**
 * PHPEXCEL生成excel檔案
* @desc 支援任意行列資料生成excel檔案,暫未新增單元格樣式和對齊
*/
require_once 'lib/PHPExcel.php';
require_once 'lib/PHPExcel/Reader/Excel2007.php';
require_once 'lib/PHPExcel/Reader/Excel5.php';
include_once 'lib/PHPExcel/IOFactory.php';

$objReader = PHPExcel_IOFactory::createReader ( 'Excel2007' );
$objReader->setReadDataOnly ( true );
$objPHPExcel = $objReader->load ("test.xls");
//$objWorksheet = $objPHPExcel->getActiveSheet ();
$objWorksheet = $objPHPExcel->getSheet (0);
//取得excel的總行數
$highestRow = $objWorksheet->getHighestRow ();
//取得excel的總列數
$highestColumn = $objWorksheet->getHighestColumn ();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString ( $highestColumn );
$excelData = array ();
for($row = 2; $row <= $highestRow; $row++) {
	for($col = 1; $col < $highestColumnIndex; $col++) {
		$excelData[$row-2][] = $objWorksheet->getCellByColumnAndRow ( $col, $row )->getValue ();
	}
}
echo "<pre>";
print_r($excelData);
echo "</pre>";

?>

這個陣列打印出來是這個樣子