474蒙特卡罗_www.474.com|欢迎您

PHPExcel导出excel表格

2019-08-23 栏目:网站建设知识 查看(6770)

一、动态生成的内容如何能当成文件来下载呢?

方法:1.将Content-Type设置成application/octet-stream就可以了,即【header('Content-Type: application/octet-stream'); 】

   2.用Content-Disposition设置下载的文件名,即【header('Content-Disposition: attachment; filename=' . $filename);】

a.基本上的下载程序都是这么写的:


b.平时我们也要考虑到浏览器的兼容性和中文文件名乱码的问题:



二、原始一点的方法:发送header,用附件的表头发送到用户浏览器表示是要下载的,然后读出数据库中的数据,一条一条的解析,写入excel格式的文件中



三、PHPExcel库

  可以到官网去下载:http://phpexcel.codeplex.com/,解压后里面有三个目录

  Classes:此文件夹中是PHPExcel核心类库文件,我们对excel报表的处理都是通过此文件夹中的类文件来完成的,注意:所有的类名都是以PHPExcel_*开头的

  Documentation:这个文件夹中存放的是PHPExcel类库的英文说明文档

  Examples:是一些小的测试案例,这些小案例对于我们入门是非常有帮助的

  拓展:当输出数字字符串到excel文件中时,可在数字字符串前面拼接一个空格即可(或者指定单元格的数据类型为文本类型)

setActiveSheetIndex(0);
    /*********************************************部分功能说明 start*********************************************/
    //设置单元格内容setCellValue(设置单元格的值)、setCellValueExplicit(设置单元格的值,并显示的指定数据的类型)
    $objExcel->getActiveSheet()->setCellValueExplicit('A1','名字',PHPExcel_Cell_DataType::TYPE_STRING);
    $objExcel->getActiveSheet()->setCellValue('A1','名字');

    //文字水平居中setHorizontal
    $objExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setHorizontal($option);
    //文字垂直居中setVertical
    $objExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setVertical($option);
    // 合并
    $objExcel->getActiveSheet()->mergeCells('A1:B1');
    // 拆分
    $objExcel->getActiveSheet()->unmergeCells('A1:B1');
    //设置单元格列setWidth(宽度)、setAutoSize(列的宽度刚好为字体内容的宽度)
    $objExcel->getActiveSheet()->getColumnDimension('A')->setWidth('10')->setAutoSize(true);
    //设置字体setName(字体)、setSize(大小)、setBold(粗体)、setUnderline(设置下划线)、setItalic(字体倾斜)
    $objExcel->getActiveSheet()->getStyle('A1')->getFont()->setName('黑体')->setSize(20)
                 ->setBold(true)->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE)->setItalic();
    //设置字体颜色
    $objExcel->getActiveSheet()->getStyle('A1')->getFont()->getColor()
                ->setARGB(PHPExcel_Style_Color::COLOR_BLUE);
    //设置单元格边框样式(getTop、getLeft、getRight、getBottom)
    $objExcel->getActiveSheet()->getStyle('B4')->getBorders()->getLeft()
             ->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
    //设置单元格边背景
    $objExcel->getActiveSheet()->getStyle('B5')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
    //设置工作表保护(导出的表格为只读,不能编辑)
    $objExcel->getActiveSheet()->getProtection()->setSheet(true);

    /*********************************************部分功能说明 end*********************************************/
    //输出到浏览器(文件名为中文时要转码使用iconv或mb_convert_encoding)
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header('Content-Disposition:inline;filename="'.$filename.'.xls"');
    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");
    $objWriter->save('php://output');exit;

?>

下面是部分参数:

  setUnderline的部分参数:
    PHPExcel_Style_Font::UNDERLINE_NONE
    PHPExcel_Style_Font::UNDERLINE_DOUBLE(双下划线)
    PHPExcel_Style_Font::UNDERLINE_DOUBLEACCOUNTING(双下划线)
    PHPExcel_Style_Font::UNDERLINE_SINGLE(下划线)
    PHPExcel_Style_Font::UNDERLINE_SINGLEACCOUNTING(下划线)

  setVertical参数:
    PHPExcel_Style_Alignment::VERTICAL_TOP(顶部)
    PHPExcel_Style_Alignment::VERTICAL_CENTER(垂直居中)
    PHPExcel_Style_Alignment::VERTICAL_BOTTOM(底部)
    PHPExcel_Style_Alignment::VERTICAL_JUSTIFY 

  setHorizontal参数:
    PHPExcel_Style_Alignment::HORIZONTAL_GENERAL
    PHPExcel_Style_Alignment::HORIZONTAL_LE
    PHPExcel_Style_Alignment::HORIZONTAL_CENTER(水平居中)
    PHPExcel_Style_Alignment::HORIZONTAL_RIGHT(右对齐)
    PHPExcel_Style_Alignment::HORIZONTAL_FILL
    PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY
    PHPExcel_Style_Alignment::HORIZONTAL_CENTER_CONTINUOUS

四、使用PHPExcel库对于大数据的支持度不是很好,很容易达到php内存上限,这里利用fputcsv写CSV(这是一种逗号分割值文件格式)

$val){
        $head[$key] = mb_convert_encoding($val,'GBK','UTF-8');
    }

    //将数据通过fputcsv写到文件句柄  
    fputcsv($fp,$head);

    //计数
    $total = 0;

    //每隔1000行刷新一下缓存buffer,不要太大,也不要太小
    $limit = 1000;

    if($result && mysql_num_rows($result)){
        while($rows = mysql_fetch_row($result)){
            $total++;
            if($total == $limit){
                //送出缓冲区的内容
                ob_flush();
                //刷新php程序的缓存
                flush();

                $total = 0;
            }

            foreach($rows as $k=>$v){
                $rows[$k] = mb_convert_encoding($v,'GBK','UTF-8');
            }

            fputcsv($fp,$rows);

        }
    die();
    }

?>




扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流

郑重申明:庆阳庆软网络科技有限公司|474蒙特卡罗以外的任何单位或个人,不得使用该案例作为工作成功展示!