PHPExcel類是php一個excel表格處理插件了,下面我來給大家介紹利用PHPExcel類來導入與導出excel表格的應用方法,有需要了解的朋友不防參考參考,PHPExcel自己百度下載這里不介紹了.
導出Excel用法,代碼如下:
- //設置環境變量(新增PHPExcel)
- set_include_path('.'. PATH_SEPARATOR . Yii::app()->basePath.'/lib/PHPExcel' . PATH_SEPARATOR .
- get_include_path());
- //注:在yii中,也可以直接Yii::import(“application.lib.PHPExcel.*”);
- //引入PHPExcel相關文件
- require_once "PHPExcel.php";
- require_once 'PHPExcel/IOFactory.php';
- require_once 'PHPExcel/Writer/Excel5.php';
- //把要導出的內容放到表格,新建
- $resultPHPExcel = new PHPExcel();
- //設置參數 設值
- $resultPHPExcel->getActiveSheet()->setCellValue('A1', '季度');
- $resultPHPExcel->getActiveSheet()->setCellValue('B1', '名稱');
- $resultPHPExcel->getActiveSheet()->setCellValue('C1', '數量');
- $i = 2; //開源代碼Vevb.com
- foreach($data as $item){
- $resultPHPExcel->getActiveSheet()->setCellValue('A' . $i, $item['quarter']);
- $resultPHPExcel->getActiveSheet()->setCellValue('B' . $i, $item['name']);
- $resultPHPExcel->getActiveSheet()->setCellValue('C' . $i, $item['number']);
- $i ++;
- }
設置導出參數,代碼如下:
- //設置導出文件名
- $outputFileName = 'total.xls';
- $xlsWriter = new PHPExcel_Writer_Excel5($resultPHPExcel);
- //ob_start(); ob_flush();
- header("Content-Type: application/force-download");
- header("Content-Type: application/octet-stream");
- header("Content-Type: application/download");
- header('Content-Disposition:inline;filename="'.$outputFileName.'"');
- header("Content-Transfer-Encoding: binary");
- header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
- header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
- header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
- header("Pragma: no-cache");
- $xlsWriter->save( "php://output" );
輸出有錯,默認$xlsWriter->save( "php://output" );可能因為緩存不夠大,而顯示不完整,所以做個中轉,代碼如下:
- $finalFileName = (Yii::app()->basePath.'/runtime/'.time().'.xls';
- $xlsWriter->save($finalFileName);
- echo file_get_contents($finalFileName);
- //file_get_contents() 函數把整個文件讀入一個字符串中。和 file() 一樣,不同的是 file_get_contents() 把文件讀入一個字符串。
導入Excel用法,代碼如下:
- <?php
- if($_POST['leadExcel'] == "true")
- {
- $filename = $_FILES['inputExcel']['name'];
- $tmp_name = $_FILES['inputExcel']['tmp_name'];
- $msg = uploadFile($filename,$tmp_name);
- echo $msg;
- }
- //導入Excel文件
- function uploadFile($file,$filetempname)
- {
- //自己設置的上傳文件存放路徑
- $filePath = 'upFile/';
- $str = "";
- //下面的路徑按照你PHPExcel的路徑來修改
- require_once '../PHPExcel/PHPExcel.php';
- require_once '../PHPExcel/PHPExcel/IOFactory.php';
- require_once '../PHPExcel/PHPExcel/Reader/Excel5.php';
- //注意設置時區
- $time=date("y-m-d-H-i-s");//去當前上傳的時間
- //獲取上傳文件的擴展名
- $extend=strrchr ($file,'.');
- //上傳后的文件名
- $name=$time.$extend;
- $uploadfile=$filePath.$name;//上傳后的文件名地址
- //move_uploaded_file() 函數將上傳的文件移動到新位置。若成功,則返回 true,否則返回 false。
- $result=move_uploaded_file($filetempname,$uploadfile);//假如上傳到當前目錄下
- //echo $result;
- if($result) //如果上傳文件成功,就執行導入excel操作
- {
- include "conn.php";
- $objReader = PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format
- $objPHPExcel = $objReader->load($uploadfile);
- $sheet = $objPHPExcel->getSheet(0);
- $highestRow = $sheet->getHighestRow(); //取得總行數
- $highestColumn = $sheet->getHighestColumn(); //取得總列數
- /* 第一種方法
- //循環讀取excel文件,讀取一條,插入一條
- for($j=1;$j<=$highestRow;$j++) //從第一行開始讀取數據
- {
- for($k='A';$k<=$highestColumn;$k++) //從A列讀取數據
- {
- //
- 這種方法簡單,但有不妥,以'/'合并為數組,再分割/為字段值插入到數據庫
- 實測在excel中,如果某單元格的值包含了/導入的數據會為空
- //
- $str .=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue().'/';//讀取單元格
- }
- //echo $str; die();
- //explode:函數把字符串分割為數組。
- $strs = explode("/",$str);
- $sql = "INSERT INTO te(`1`, `2`, `3`, `4`, `5`) VALUES (
- '{$strs[0]}',
- '{$strs[1]}',
- '{$strs[2]}',
- '{$strs[3]}',
- '{$strs[4]}')";
- //die($sql);
- if(!mysql_query($sql))
- {
- return false;
- echo 'sql語句有誤';
- }
- $str = "";
- }
- unlink($uploadfile); //刪除上傳的excel文件
- $msg = "導入成功!";
- */
- /* 第二種方法*/
- $objWorksheet = $objPHPExcel->getActiveSheet();
- $highestRow = $objWorksheet->getHighestRow();
- echo 'highestRow='.$highestRow;
- echo "<br>";
- $highestColumn = $objWorksheet->getHighestColumn();
- $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);//總列數
- echo 'highestColumnIndex='.$highestColumnIndex;
- echo "<br>";
- $headtitle=array();
- for ($row = 1;$row <= $highestRow;$row++)
- {
- $strs=array();
- //注意highestColumnIndex的列數索引從0開始
- for ($col = 0;$col < $highestColumnIndex;$col++)
- {
- $strs[$col] =$objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
- }
- $sql = "INSERT INTO te(`1`, `2`, `3`, `4`, `5`) VALUES (
- '{$strs[0]}',
- '{$strs[1]}',
- '{$strs[2]}',
- '{$strs[3]}',
- '{$strs[4]}')";
- //die($sql);
- if(!mysql_query($sql))
- {
- return false;
- echo 'sql語句有誤';
- }
- }
- }
- else
- {
- $msg = "導入失敗!";
- }
- return $msg;
- }
- ?>
HTML網頁代碼,代碼如下:
- <form action="upload.php" method="post" enctype="multipart/form-data">
- <input type="hidden" name="leadExcel" value="true">
- <table align="center" width="90%" border="0">
- <tr>
- <td>
- <input type="file" name="inputExcel"><input type="submit" value="導入數據">
- </td>
- </tr>
- </table>
- </form>
新聞熱點
疑難解答