PHPexcel導出


寫過很多次的導出,依舊每次導出的時候都會忘記一些必要參數,趁着有時間記錄下

參數設置 $header 列頭

    $datas 數據
    $fileName 文件名稱
    $sheet sheet名稱
    $isDown 文件保存到指定文件還是直接輸出
 
 public function excelout($header,$datas,$fileName,$sheet,$isDown=false)
{
ini_set ("memory_limit","-1"); //內存無限制
$obj = new PHPExcel();
$obj->setActiveSheetIndex(0); //激活默認sheet
$obj->getActiveSheet()->setTitle($sheet); //設置激活sheet的名稱
//頭部及列設置
$jisuan = 0;
foreach ($header as $key=>$headerlist ){
if($key>25){ //當導出列大於25列時處理
$list[]= chr(65).chr(65+$jisuan);
$obj->getActiveSheet()->getColumnDimension(chr(65).chr(65+$jisuan))->setWidth(20);
$obj->getActiveSheet()
->setCellValue($list[$key] . 1, $headerlist);
}else{
$list[]=chr(65+$jisuan);
$obj->getActiveSheet()->getColumnDimension(chr(65+$jisuan))->setWidth(20);
$obj->getActiveSheet()
->setCellValue($list[$key] . 1, $headerlist);
}
if($jisuan == 25){
$jisuan = 0;
}else{
$jisuan++;
}
}
//渲染數據部分
$i = 2;
foreach ($datas as $data){
$j=0;
foreach ($data as $key=>$datalist){
$obj->getActiveSheet()
->setCellValue($list[$j] . $i,$datalist);
$j++;
}
$i++;
}
// header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $fileName . '.xls');
header('Cache-Control: max-age=1');
header("Content-type: application/vnd.ms-excel");
header("Content-Type: application/force-download");
header("Expires: 0");
header("Pragma: no-cache");
$objWriter = \PHPExcel_IOFactory::createWriter($obj, 'Excel5');
if($isDown){ //下載文件到服務器
$url = Core::Instance()->getAppPath();
$file = '/temp/'.$fileName.'.xlsx';
$_savePath = $url.$file;
$mode = 0777;
if (!is_dir($url)){//判斷路徑是否存在 不存在則創建
@mkdir($url, $mode);
@chmod($url,0777);
if(is_file($_savePath)){//判斷文件是否存在,存在則刪除
unlink($_savePath);
}
$objWriter->save($_savePath);
return $file;
} else{
if(is_file($_savePath)){
unlink($_savePath);
}
$objWriter->save($_savePath);//保存文件到指定路徑
return $file;
}

}else{
header("Content-Disposition:attachment;filename=$fileName.xls");
$objWriter->save('php://output');exit; 直接輸出到瀏覽器
}

}


//導出單一查詢數據量過大時查詢分sheet
 ini_set ("memory_limit","-1");
$name = trim( $this->request("name"));
$staffname = trim( $this->request("staffname"));
$start_time = trim($this->request("start_time"));
$end_time = trim($this->request("end_time"));
$header = ['序列號','姓名']; //列表頭
$total = 10000; //總數據條數
$obj = new PHPExcel(); //實例化
$obj->removeSheetByIndex(0); //避免緩存
$sheet = 'sheet名稱';
$fileName = "文件名稱";
for ($i = 0; $i<=intval($total/100);$i++){//每一百條為一個sheet
$datast = 'sql查詢出來的數據';
// var_dump($datast);die;
$obj->createSheet($i); //創建sheet
$obj->setActiveSheetIndex($i);//激活sheet
$obj->getActiveSheet()->setTitle($sheet.$i); //給sheet命名

//頭部及列設置
foreach ($header as $key=>$headerlist ){
$list[]=chr(65+$key);
$obj->getActiveSheet()->getColumnDimension(chr(65+$key))->setWidth(20);
$obj->getActiveSheet()
->setCellValue($list[$key] . 1, $headerlist);
}

foreach ($datast[1] as $key=>$value){
$datas[$key]['id']=$value['id']??'';
$datas[$key]['name']=$value['name']??'';

}
//內容部分
$n = 2;
foreach ($datas as $data){
$j=0;
foreach ($data as $datalist){
$obj->getActiveSheet()
->setCellValue($list[$j] . $n,$datalist);
$j++;
}
$n++;
}
}

$obj->setActiveSheetIndex(0);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header("Content-type: application/vnd.ms-excel");
header("Content-Type: application/force-download");
header('Content-Disposition: attachment;filename="' . $fileName . '.xls');
header('Cache-Control: max-age=1');
header("Expires: 0");
header("Pragma: no-cache");
$objWriter = \PHPExcel_IOFactory::createWriter($obj, 'Excel5');
$objWriter->save('php://output'); //瀏覽器輸出




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM