phpexcel

今天寫項目需要將查詢結果用php導出爲excel文件,查了網上主流的一些做法,發現phpexcel功能很強大,試着模仿着examples寫了一個簡單的導出excel的php代碼

下載最新的phpexcel插件可以上官網查找,這裏就不多做說明:http://phpexcel.codeplex.com/

**

excel寫入數據及輸出過程

**

1.引入phpexcel插件 ,引入前進行錯誤檢查(也可忽略)

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//date_default_timezone_set('Europe/London');
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
if (PHP_SAPI == 'cli')
    die('This excel should only be run from a Web Browser');
require_once dirname(__FILE__) . '/PHPExcel.php';

2.創建一個excel,

$objPHPExcel = new PHPExcel();

3.因爲項目的excel有特定的格式,所以需要引入一個模板,可提前將模板寫好放在摸個目錄下,接着引用該模版,引用的方法如下

$objReader = PHPExcel_IOFactory::createReader('Excel2007');//如果是引入excel2003,將Excel2007改爲Excel5即可,如果不改,則輸出的excel會錯誤無法打開
$objPHPExcel = $objReader->load("模板的路徑");

4.設置文件屬性(也可忽略採用默認的格式,暫時沒發現什麼問題)

$objPHPExcel->getProperties()
->setCreator("zly")
->setLastModifiedBy("zly")
 ->setTitle("zly")
->setSubject("PHPExcel zly Document")
->setDescription("zlydocument for PHPExcel, generated using PHP classes.")
->setKeywords("office PHPExcel php")
->setCategory("zlyresult file");

5.寫數據

//setActiveSheetIndex(num) num爲要寫入的工作薄的位置,如1表示sheet1(暫時不確定)
//setCellValue(param1,param2) param1爲你要寫入數據的位置,param2爲要在該位置寫的數據
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('C1', "你好")
 ->setCellValue('D1',<span style="font-family: Arial, Helvetica, sans-serif;">"你好"</span>)
->setCellValue('F1', <span style="font-family: Arial, Helvetica, sans-serif;">"你好"</span><span style="font-family: Arial, Helvetica, sans-serif;">) </span>
->setCellValue('G1', <span style="font-family: Arial, Helvetica, sans-serif;">"你好"</span><span style="font-family: Arial, Helvetica, sans-serif;">);</span>

6.改寫工作薄名稱(如果沒用可不寫)

$objPHPExcel->getActiveSheet(0)->setTitle('zly');

7.設置打開excel時優先打開的工作薄(默認1)

$objPHPExcel->getActiveSheet(0)->setTitle('zly');

8.設置頁面頭信息

header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // 如果是excel2003,則寫header('Content-Type: application/vnd.ms-excel');否則輸出的excel無法打開
        header('Content-Disposition: attachment;filename="sj.xlsx"');
        header('Cache-Control: max-age=0');
        // If you're serving to IE 9, then the following may be needed
        header('Cache-Control: max-age=1');

        // If you're serving to IE over SSL, then the following may be needed
        header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
        header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
        header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
        header ('Pragma: public'); // HTTP/1.0

9.輸出excel的代碼

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');  //如果爲excel2003,則改爲Excel5
$objWriter->save('php://output');

**

注意點:

**
1.一定要分清引入的模板是2003的還是2007

$objReader = PHPExcel_IOFactory::createReader('param');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); // 如果是excel2003,則寫header('Content-Type: application/vnd.ms-excel');否則輸出的excel無```
$objWriter=PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');//2003用Excel5,2007用Excel2007

2.如果有從數據庫讀數據再寫入時,一定不要有錯誤信息輸出,否則文件無法打開

3.頁面也不要有其他任何輸出,否則文件無法打開

OK,到此一個簡單的excel導出的代碼就完成啦,如果還要具體的設置列寬或者顏色背景什麼的可以參照api文檔。
這裏有一個別人寫的中文文檔,比較老了,但基本的還能用,可以作參考http://www.cnblogs.com/freespider/p/3284828.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章