PHP导出Excel

导出方法一 使用table输出导出
//导出代码
public function export(){
  set_time_limit(0);
  ini_set('memory_limit','1024M');//设置导出最大内存
  $ranking = self::getResult();//获得需要导出的数据
  //输出的表头
  $_pre    = array(
      "listing"           =>  "ListingID",
      "salesbefore"       =>  "前十天销量",
      "salesafter"        =>  "后十天销量",
      "saleschange"       =>  "涨跌销量",
      "percentchange"     =>  "涨跌幅度(%)",
  );
  $date = date("YmdHis");//日期作为输出文件后缀
  $content = getXLSFromList($_pre,$ranking);//获得输出的表格内容
  header("Content-type:application/vnd.ms-execl;charset=gb2312");//设置导出格式
  header("Content-Disposition:attactment;filename=销量变化排行榜".$date.".xls");//设置导出文件名
  header("Pragma: no-cache");
  header("Expires: 0");
  echo $content;
  exit;
}
//此方法建议写入公共方法 通过数组遍历得出导出报表类型结构 
function getXLSFromList($pres,$lists){
//  内容太大建议搜索少量再导出
//    if(count($lists)>=20000)
//    {
//        header("Content-Type:text/html;charset=utf-8");
//        echo "<br/><h1 style='color:red'>Export data is too large, please narrow your search!</h1><br/>";
//        exit;
//    }
    $keys=array_keys($pres);//获取表头的键名
    $content="";
    $content.="<table border='1'><tr>";
  //输出表头键值
    foreach($pres as $_pre){
        $content.="<td>$_pre</td>";
    }
    $content.="</tr>";
    foreach($lists as $_list){
        $content.= "<tr>";
            foreach($keys as $key){
                $content.= "<td style='vnd.ms-excel.numberformat:@'>".$_list[$key]."</td>"; //style样式将导出的内容都设置为文本格式 输出对应键名的键值 即内容
            }
        $content.="</tr>";
    }
    $content.="</table>";
    return $content;
}
导出方法二 使用PHPExcel导出
public function export(){
     set_time_limit(0);
        ini_set('memory_limit','1024M');
        $ranking = self::getResult();  //获取需要导出的内容
        include_once(EXTEND_PATH . 'Library/ORG/PHPExcel/PHPExcel.class.php');  //引入PHPExcel文件 
        $objPHPExcel = new PHPExcel();
     //设置文件的一些属性,在xls文件——>属性——>详细信息里可以看到这些值
        $objPHPExcel->getProperties()->setCreator("ctos")
                    ->setLastModifiedBy("ctos")
                    ->setTitle("Office 2007 XLSX Test Document")
                    ->setSubject("Office 2007 XLSX Test Document")
                    ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
                    ->setKeywords("office 2007 openxml php")
                    ->setCategory("Test result file");
        //设置列宽
        $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(15);
        $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(15);
        $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
        $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
        $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(20);
        //设置水平居中显示
        $objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('C')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->getActiveSheet()->getStyle('E')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
        $objPHPExcel->setActiveSheetIndex(0)                                                                            // set table header content
                    ->setCellValue('A1', 'Listing ID')
                    ->setCellValue('B1', '前十天销量')
                    ->setCellValue('C1', '后十天销量')
                    ->setCellValue('D1', '涨跌销量')
                    ->setCellValue('E1', '涨跌幅度(%)')
        $a = 1;                                                                                                         //设置默认值
        foreach($ranking as $k){
            $a++;
            $objPHPExcel->setActiveSheetIndex(0)
                        ->setCellValueExplicit('A'.$a, $k['listing'],PHPExcel_Cell_DataType::TYPE_STRING)//设置数字的科学计数法显示为文本
                        ->setCellValue('B'.$a, $k['salesbefore'])
                        ->setCellValue('C'.$a, $k['salesafter'])
                        ->setCellValue('D'.$a, $k['saleschange'])
                        ->setCellValue('E'.$a, $k['percentchange'])
            //设置自动换行
            $objPHPExcel->getActiveSheet()->getStyle("A$a")->getAlignment()->setWrapText(true);
            $objPHPExcel->getActiveSheet()->getStyle("B$a")->getAlignment()->setWrapText(true);
        }
        $objPHPExcel->getActiveSheet()->setTitle('销量变化排行榜');
        $objPHPExcel->setActiveSheetIndex(0);
        // excel头参数
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="销量变化排行榜('.date('YmdHis').').xls"');         //日期为文件名后缀
        header('Cache-Control: max-age=0');
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');                                          //excel5为xls格式,excel2007为xlsx格式
        $objWriter->save('php://output');
}```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值