PHP输出Execl PHPExecl

方法1:

/** 
 * 创建(导出)Excel数据表格 
 * @param  array   $list 要导出的数组格式的数据 
 * @param  string  $filename 导出的Excel表格数据表的文件名 
 * @param  array   $header Excel表格的表头 
 * @param  array   $index $list数组中与Excel表格表头$header中每个项目对应的字段的名字(key值) 
 * 比如: $header = array('编号','姓名','性别','年龄'); 
 *       $index = array('id','username','sex','age'); 
 *       $list = array(array('id'=>1,'username'=>'YQJ','sex'=>'男','age'=>24)); 
 * @return [array] [数组] 
 */ 
function createtable($list,$filename,$header=array(),$index = array()){    
    header("Content-type:application/vnd.ms-excel");    
    header("Content-Disposition:filename=".$filename.".xls");    
    $teble_header = implode("\t",$header);  
    $strexport = $teble_header."\r";  
    foreach ($list as $row){    
        foreach($index as $val){  
            $strexport.=$row[$val]."\t";     
        }  
        $strexport.="\r";   
  
    }    
    $strexport=iconv('UTF-8',"GB2312//IGNORE",$strexport);    
    exit($strexport);       
} 

此方法代码量少,可以放在thinkPHP5中的公共函数common.php中,方便调用,但是对输出的Excel表格无法设置属性

方法2:
首先需要到下载SDK,GitHub下载地址,下载后解压,我们只需要里边的Classes文件夹,将其改名为PHPExcel。我这里是基于thinkPHP5的,可以放置在app同级目录的extend中。

导图

/*
        PHPExcel
    */
    use think\Loader;
    public function excel(){
        
        Loader::import('PHPExcel.PHPExcel');    //thinkphp5加载类库
        $objPHPExcel = new \PHPExcel();      //实例化PHPExcel类,
        $objSheet = $objPHPExcel->getActiveSheet();     //获取当前活动的sheet对象
        $objSheet->setTitle("test");      //给当前活动sheet起个名称

        /*字符串方式填充数据,开发中可以将数据库取出的数据根据具体情况遍历填充*/
        $objSheet->setCellValue("A1","姓名")->setCellValue("B1","分数")->setCellValue("C1","班级");       //填充数据
        // $objSheet->setCellValue("A2","张三")->setCellValue("B2","3434346354634563443634634634563")->setCellValue("C2","一班");       //填充数据
        $objSheet->setCellValue("A2","张三")->setCellValueExplicit("B2","123216785321321321312",\PHPExcel_Cell_DataType::TYPE_STRING)->setCellValue("C2","一班");//填充数据时添加此方法,并且使用getNumberFormat方法和setFormatCode方法设置,可以让如订单号等长串数字不使用科学计数法

        /*数组方式填充数据*/
        $arr = [
            [],     //空出第一行,打印出的效果将空出第一行
            ['','信息'],     //空出第一列,打印出的效果将空出第一列
            ['',"姓名\nname",'年龄','性别','分数','年级'],     //空出第一列,*这里的\n是为了*配合setWrapText自动换行
            ['','李四','33','男','33543653456346363646','4'], 
            ['','李四','33','男','54546456456447478548','4'], 
            ['','李四','33','男','56635374658465632545','5'], 
            ['','李四','33','男','87473457856856745646','5'], 
            ['','李四','33','男','32','7'], 
            ['','李四','33','男','98','5'], 
        ];
        $objSheet->fromArray($arr);       //填充数组数据,较为消耗资源且阅读不便,不推荐


        /*样式配置信息--方法配置*/
        $objSheet->mergecells("B2:F2");       //合并单元格
        $objSheet->getDefaultStyle()->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER)->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置excel文件默认水平垂直方向居中,垂直setVertical,水平setHorizontal,因为是基于thinkPHP5所以这里PHPExcel_Style_Alignment前使用"\"引入
        $objSheet->getDefaultStyle()->getFont()->setSize(14)->setName("微软雅黑");//设置所有默认字体大小和格式
        $objSheet->getStyle("B2:F2")->getFont()->setSize(20)->setBold(true);//设置指定范围内字体大小和加粗
        $objSheet->getDefaultRowDimension()->setRowHeight(33);//设置所有行默认行高
        $objSheet->getRowDimension(2)->setRowHeight(50);//设置指定行(第二行)行高
        $objSheet->getStyle("B2:F2")->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setRGB('EEC591');//指定填充背景颜色,不需要加"#"定义样式数组,字体,背景,边框等都此方法设置,这里展示边框
        $objSheet->getStyle("B3")->getAlignment()->setWrapText(true);//设置文字自动换行,要用getStyle()方法选中范围,同时要在内容中添加"\n",而且该内容要用双引号才会解析
        $objSheet->getStyle("E")->getNumberFormat()->setFormatCode(\PHPExcel_Style_NumberFormat::FORMAT_TEXT);//设置某列单元格格式为文本格式,便于禁用科学计数法
        bjSheet->getColumnDimension('M')->setAutoSize(true);//设置某列宽度

        /*数组配置*/
        $styleArray = array(
            'borders' => array(
                'outline' => array(
                    'style' => \PHPExcel_Style_Border::BORDER_THICK,
                    'color' => array('rgb' => 'EE0000'),
                ),
            ),
        );
        $objSheet->getStyle("B3:G3")->applyFromArray($styleArray);//设置指定区域的边框,设置边框必须要使用getStyle()选中范围


        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');//生成objWriter对象,Excel2007(xlsx)为指定格式,还有Excel5表示Excel2003(xls)

        /*浏览器查看,浏览器保存*/
        self::browser_excel('Excel2007','test.xlsx');//输出到浏览器,参数1位Excel类型可为Excel5和Excel2007,第二个参数为文件名(需加后缀名),此方法为自定义
        $objWriter->save("php://output");       //save()里可以直接填写保存路径

        /*保存到知道路径*/
        $objWriter->save(ROOT_PATH."excel.xlsx");       //save()里可以直接填写保存路径
        $objWriter->save('php://output');		//也可直接输出


    }

自定义的浏览器header设置方法

/*
        浏览器打开时设置header头
        $type   excel版本类型  Excel5---Excel2003, Excel2007
        $filename    输出的文件名
    */
    function browser_excel($type,$filename){
        if($type=="Excel5"){
                header('Content-Type: application/vnd.ms-excel');//告诉浏览器将要输出excel03文件
        }else{
                header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器数据excel07文件
        }
        header('Content-Disposition: attachment;filename="'.$filename.'"');//告诉浏览器将输出文件的名称,要是没有设置,会把当前文件名设置为名称
        header('Cache-Control: max-age=0');//禁止缓存
    }

想要获取更完善的配置信息,百度PHPExcel中文文档有很多参考资料

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值