php使用phpexcel開發庫生成和讀取excel
阿新 • • 發佈:2019-01-29
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>"; ?>
這個陣列打印出來是這個樣子