php利用PHPExcel类导出导入Excel用法
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';
//把要导出的内容放到表格
1 //新建 2 3 $resultPHPExcel = new PHPExcel(); 4 //设置参数 5 6 //设值 7 8 $resultPHPExcel->getActiveSheet()->setCellValue('A1', '季度'); 9 $resultPHPExcel->getActiveSheet()->setCellValue('B1', '名称'); 10 $resultPHPExcel->getActiveSheet()->setCellValue('C1', '数量'); 11 $i = 2; 12 foreach($data as $item){ 13 $resultPHPExcel->getActiveSheet()->setCellValue('A' . $i, $item['quarter']); 14 $resultPHPExcel->getActiveSheet()->setCellValue('B' . $i, $item['name']); 15 $resultPHPExcel->getActiveSheet()->setCellValue('C' . $i, $item['number']); 16 $i ++; 17 }
//设置导出参数
1 //设置导出文件名 2 3 $outputFileName = 'total.xls'; 4 5 $xlsWriter = new PHPExcel_Writer_Excel5($resultPHPExcel); 6 7 //ob_start(); ob_flush(); 8 9 header("Content-Type: application/force-download"); 10 11 header("Content-Type: application/octet-stream"); 12 13 header("Content-Type: application/download"); 14 15 header('Content-Disposition:inline;filename="'.$outputFileName.'"'); 16 17 header("Content-Transfer-Encoding: binary"); 18 19 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 20 21 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 22 23 header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 24 25 header("Pragma: no-cache"); 26 27 $xlsWriter->save( "php://output" );
输出有错。
默认$xlsWriter->save( "php://output" );可能因为缓存不够大,而显示不完整,所以做个中转,方式如下:
1 $finalFileName = (Yii::app()->basePath.'/runtime/'.time().'.xls'; 2 3 $xlsWriter->save($finalFileName); 4 5 echo file_get_contents($finalFileName);
//file_get_contents() 函数把整个文件读入一个字符串中。和 file() 一样,不同的是 file_get_contents() 把文
件读入一个字符串。
导入Excel用法
1 <? 2 if($_POST['leadExcel'] == "true") 3 { 4 $filename = $_FILES['inputExcel']['name']; 5 $tmp_name = $_FILES['inputExcel']['tmp_name']; 6 $msg = uploadFile($filename,$tmp_name); 7 echo $msg; 8 } 9 10 //导入Excel文件 11 function uploadFile($file,$filetempname) 12 { 13 //自己设置的上传文件存放路径 14 $filePath = 'upFile/'; 15 $str = ""; 16 //下面的路径按照你PHPExcel的路径来修改 17 require_once '../PHPExcel/PHPExcel.php'; 18 require_once '../PHPExcel/PHPExcel/IOFactory.php'; 19 require_once '../PHPExcel/PHPExcel/Reader/Excel5.php'; 20 21 //注意设置时区 22 $time=date("y-m-d-H-i-s");//去当前上传的时间 23 //获取上传文件的扩展名 24 $extend=strrchr ($file,'.'); 25 //上传后的文件名 26 $name=$time.$extend; 27 $uploadfile=$filePath.$name;//上传后的文件名地址 28 //move_uploaded_file() 函数将上传的文件移动到新位置。若成功,则返回 true,否则返回 false。 29 $result=move_uploaded_file($filetempname,$uploadfile);//假如上传到当前目录下 30 //echo $result; 31 if($result) //如果上传文件成功,就执行导入excel操作 32 { 33 include "conn.php"; 34 $objReader = PHPExcel_IOFactory::createReader('Excel5');//use excel2007 for 2007 format 35 $objPHPExcel = $objReader->load($uploadfile); 36 $sheet = $objPHPExcel->getSheet(0); 37 $highestRow = $sheet->getHighestRow(); //取得总行数 38 $highestColumn = $sheet->getHighestColumn(); //取得总列数 39 40 /* 第一种方法 41 42 //循环读取excel文件,读取一条,插入一条 43 for($j=1;$j<=$highestRow;$j++) //从第一行开始读取数据 44 { 45 for($k='A';$k<=$highestColumn;$k++) //从A列读取数据 46 { 47 // 48 这种方法简单,但有不妥,以''合并为数组,再分割为字段值插入到数据库 49 实测在excel中,如果某单元格的值包含了导入的数据会为空 50 // 51 $str .=$objPHPExcel->getActiveSheet()->getCell("$k$j")->getValue().'';//读取单元格 52 } 53 //echo $str; die(); 54 //explode:函数把字符串分割为数组。 55 $strs = explode("",$str); 56 $sql = "INSERT INTO te(`1`, `2`, `3`, `4`, `5`) VALUES ( 57 '{$strs[0]}', 58 '{$strs[1]}', 59 '{$strs[2]}', 60 '{$strs[3]}', 61 '{$strs[4]}')"; 62 //die($sql); 63 if(!mysql_query($sql)) 64 { 65 return false; 66 echo 'sql语句有误'; 67 } 68 $str = ""; 69 } 70 unlink($uploadfile); //删除上传的excel文件 71 $msg = "导入成功!"; 72 */ 73 74 /* 第二种方法*/ 75 $objWorksheet = $objPHPExcel->getActiveSheet(); 76 $highestRow = $objWorksheet->getHighestRow(); 77 echo 'highestRow='.$highestRow; 78 echo "<br>"; 79 $highestColumn = $objWorksheet->getHighestColumn(); 80 $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);//总列数 81 echo 'highestColumnIndex='.$highestColumnIndex; 82 echo "<br>"; 83 $headtitle=array(); 84 for ($row = 1;$row <= $highestRow;$row++) 85 { 86 $strs=array(); 87 //注意highestColumnIndex的列数索引从0开始 88 for ($col = 0;$col < $highestColumnIndex;$col++) 89 { 90 $strs[$col] =$objWorksheet->getCellByColumnAndRow($col, $row)->getValue(); 91 } 92 $sql = "INSERT INTO te(`1`, `2`, `3`, `4`, `5`) VALUES ( 93 '{$strs[0]}', 94 '{$strs[1]}', 95 '{$strs[2]}', 96 '{$strs[3]}', 97 '{$strs[4]}')"; 98 //die($sql); 99 if(!mysql_query($sql)) 100 { 101 return false; 102 echo 'sql语句有误'; 103 } 104 } 105 } 106 else 107 { 108 $msg = "导入失败!"; 109 } 110 return $msg; 111 } 112 ?>
HTML网页代码
1 <form action="upload.php" method="post" enctype="multipart/form-data"> 2 <input type="hidden" name="leadExcel" value="true"> 3 <table align="center" width="90%" border="0"> 4 <tr> 5 <td> 6 <input type="file" name="inputExcel"><input type="submit" value="导入数据"> 7 </td> 8 </tr> 9 </table> 10 </form>