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;
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用法
<?
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>