thinkphp 導出Excel文檔,導入Excel文檔;PHPExcel的使用

使用thinkphp框架導入Excel文檔,已經是一個比較一般平常的功能了;  但很多時候自己還是會出錯;所以這裏記錄一下我做的導入、導出文檔功能。

在使用Excel導入導出前需要下載插件包 PHPExcel  地址:http://phpexcel.codeplex.com

下載後放到項目根目錄Public文件裏:


導出Excel文檔:

第一種方法:

需要分頁導出的話請自己加分頁數;

public function excel(){

$task_user = M("user_from")->where($where)->limit($Page->firstRow.','.$Page->listRows)->order("'addtime desc,state asc'")->select();//先查詢到數據

//導出數據爲excel表格
include './Public/PHPExcel.php';
$excel = new PHPExcel();

//Excel表格式 
$letter = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
//表頭數組
$tableheader = array('序號','用戶姓名','電話','狀態','時間');
for($i=0;$i<count($tableheader);$i++) {
$excel->getActiveSheet()->setCellValue("$letter[$i]1","$tableheader[$i]");
}

$mes=array(); 
for($i=0;$i<count($task_user);$i++){
$addtime= date('Y-m-d H:i',$task_user[$i]['addtime']); //時間
if($task_user[$i]['sstate']==1){
$state = '顯示';
}else{
$state = '關閉';
}

$mes=array_merge($mes,array(
$i=>array(
'xuhao'=>$i+1,
'name'=>$task_user[$i]['name'],  //姓名
'phone'=>$task_user[$i]['phone'],//電話
'state'=>$state,        //狀態
'addtime'=>$addtime    //時間
)
)); 
}

for ($i = 2;$i <= count($mes) + 1;$i++) {
$j = 0;
foreach ($mes[$i - 2] as $key=>$value){
$excel->getActiveSheet()
->setCellValue("$letter[$j]$i","$value");
$j++;
}
}
$write = new PHPExcel_Writer_Excel5($excel);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header("Content-Disposition:attachment;filename=
用戶表.xls");
header("Content-Transfer-Encoding:binary");
$write->save('php://output');

   exit;

}

第二種方法:

public function excel(){

$task_user = M("user_from")->where($where)->limit($Page->firstRow.','.$Page->listRows)->order("'addtime desc,state asc'")->select();//先查詢到數據

//導出數據爲excel表格
include './Public/PHPExcel.php';
$excel = new PHPExcel();

//表頭數組
$tableheader = array('序號','用戶姓名','電話','狀態','時間');

$mes=array(); 
for($i=0;$i<count($task_user);$i++){
$addtime= date('Y-m-d H:i',$task_user[$i]['addtime']); //時間
if($task_user[$i]['sstate']==1){
$state = '顯示';
}else{
$state = '關閉';
}
$mes=array_merge($mes,array(
$i=>array(
'xuhao'=>$i+1,
'name'=>$task_user[$i]['name'],  //姓名
'phone'=>$task_user[$i]['phone'],//電話
'state'=>$state,        //狀態
'addtime'=>$addtime    //時間
)
)); 
}

$names = '申請任務管理';

$this->put_csv($mes,$tableheader,$names);
exit;

}

/**
*導出csv文件
*@param $list array 導出的二維數組內容
*@param $title array 頂部的title 一維數組
*@param $name array 導出csv的文件名稱
**/
public function put_csv($list,$title,$name){
$file_name=$name.".csv";
header ( 'Content-Type: application/vnd.ms-excel' );
header ( 'Content-Disposition: attachment;filename='.$file_name );
header ( 'Cache-Control: max-age=0' );
$file = fopen('php://output',"a");
$limit=1000;
$calc=0;
foreach ($title as $v){
$tit[]=iconv('UTF-8', 'GB2312//IGNORE',$v);
}
fputcsv($file,$tit);
foreach ($list as $v){
$calc++;
if($limit==$calc){
ob_flush();
flush();
$calc=0;
}
foreach ($v as $t){
$tarr[]=iconv('UTF-8', 'GB2312//IGNORE',$t);
}
fputcsv($file,$tarr);
unset($tarr);
}
unset($list);
fclose($file);
exit;
}

這裏說明csv:

        csv 文件最早用在簡單的數據庫裏,由於其格式簡單,並具備很強的開放性,所以起初被掃圖家用作自己圖集的標記。csv文件是個純文本文件,每一行表示一張圖片的許多屬性。你在收一套圖集時,只要能找到它的 csv 文件,用專用的軟件校驗後,你對該圖集的狀況就可以瞭如指掌。
每行相當於一條記錄,是用“,”分割字段的純文本數據庫文件。


導入Excel文檔:

//Excel導入
public function excel_volume(){
$user = M("user"); //表
if($_FILES['file'] and $_FILES['file']['error']==0){
$nameend = end(explode('.', $_FILES['file']['name']));
if($nameend=='xls'){
Vendor('ExcelReader.reader');
$Reader = new Spreadsheet_Excel_Reader();
$Reader->setOutputEncoding('utf-8');
$Reader->read($_FILES['file']['tmp_name']);//得到導入文件
$sheets = $Reader->sheets;
$countsh = count($sheets[0]['cells']); //要導入數據
$array = array();
//將要導入的數據變成一個個以爲數組
for($i=0;$i<$countsh;$i++){
if($sheets[0]['cells'][$i+1][1]){
$date['name'] = $sheets[0]['cells'][$i+1][1]; //名稱
$date['phone'] = $sheets[0]['cells'][$i+1][2];//電話
$date['addtime'] = str_replace("\\", "",str_replace("\&quot;", "", $sheets[0]['cells'][$i+1][3])); //時間
$date['state'] = $sheets[0]['cells'][$i+1][4];    //狀態 1開啓/0關閉
}//名稱、電話、時間、狀態 不能爲空
if($date['sk_name']!='' && $date['sk_addtime']!='' && $date['sk_addtime']>time() && $date['sk_state']!=''){
$user->add($date);//寫入數據庫
}
}
echo "導入成功。";
} else {
$this->error('請上傳後綴名爲.xls的文件');exit;
}
}
header('Location:/index.php/Index/user_admini');
}

到這裏文檔就導入成功了。

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