PHP导出指定格式excel

Posted 满眼都是她

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP导出指定格式excel相关的知识,希望对你有一定的参考价值。

以PHPExcel为例

 

1、composer require phpoffice/phpexcel

 

2//导出指定格式excel
    public function excel()
    {
        /**
         *第一步:实例化PHPExcel类 等同于在桌面上新建一个Excel表格
         **/
        $objPHPExcel = new \\PHPExcel();
        /**
         *第二步:获得当前活动sheet的操作对象
         **/
        $obSheet = $objPHPExcel->getActiveSheet();
        /**
         *第三步:给当前活动sheet设置名字
         **/
        $obSheet->setTitle(\'第一个sheet\');
        /**
         *第四步:向单元格内插入内容
         **/
//        $obSheet->getStyle(\'A1\')->getAlignment()->setHorizontal(\\PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);//设置A1水平右对齐
//        $obSheet->getStyle(\'A1\')->getAlignment()->setHorizontal(\\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置A1水平居中
//        $obSheet->getStyle(\'A1\')->getAlignment()->setHorizontal(\\PHPExcel_Style_Alignment::HORIZONTAL_LEFT);//设置A1水平左对齐
//        $obSheet->getStyle(\'A1\')->getAlignment()->setVertical(\\PHPExcel_Style_Alignment::VERTICAL_CENTER);//设置A1垂直居中
//        $obSheet->getStyle(\'A1\')->getAlignment()->setVertical(\\PHPExcel_Style_Alignment::VERTICAL_TOP);//设置A1垂直靠上
//        $obSheet->getStyle(\'A1\')->getAlignment()->setVertical(\\PHPExcel_Style_Alignment::VERTICAL_BOTTOM);//应该是bottom吧,这个没用到,网上也没找到,自己也没做测试,哈哈,就先这样吧
//        $obSheet->getDefaultRowDimension()->setRowHeight(30);//设置默认高度30
//        $obSheet-> getStyle(\'A1\') -> getFont() -> setSize(14);//设置单元格的字体大小
//        $obSheet->getStyle("A1")->getFont()->setBold(true); //设置单元格字体为粗体
//        $obSheet-> getStyle(\'A4\')->getFont()->getColor()->setRGB(\'ff0000\');//设置单元格字体颜色
//        $obSheet->getStyle(\'C\')->getAlignment()->setWrapText(True);//设置自动换行
//        $obSheet->getRowDimension(\'1\')->setRowHeight(45);//单独设置一行的高度
//        $obSheet->getColumnDimension(\'B\')->setWidth(21);//设置单元格宽度

        $objPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal(\\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);//设置默认水平居中
        $objPHPExcel->getDefaultStyle()->getAlignment()->setVertical(\\PHPExcel_Style_Alignment::VERTICAL_CENTER);//设置默认垂直居中

        $obSheet->getDefaultStyle()->getFont()->setSize(11);//设置默认字体大小
        $obSheet->mergeCells("H4:I5");//合并单元格
        $obSheet->mergeCells("J4:W5");
        $obSheet->mergeCells("H6:L9");
        $obSheet->mergeCells("H10:L11");
        $obSheet->mergeCells("H12:L13");
        $obSheet->mergeCells("H14:L15");
        $obSheet->mergeCells("H16:L17");
        $obSheet->mergeCells("H18:L19");
        $obSheet->mergeCells("H20:I23");
        $obSheet->mergeCells("J20:V23");
        $obSheet->mergeCells("M6:N9");
        $obSheet->mergeCells("W6:W7");
        $obSheet->mergeCells("W8:W9");
        $obSheet->mergeCells("W10:W11");
        $obSheet->mergeCells("M10:N11");
        $obSheet->mergeCells("M12:N13");
        $obSheet->mergeCells("M14:N15");
        $obSheet->mergeCells("M16:N17");
        $obSheet->mergeCells("M18:N19");
        $obSheet->mergeCells("O6:V7");
        $obSheet->mergeCells("O8:O9");
        $obSheet->mergeCells("P8:P9");
        $obSheet->mergeCells("Q8:Q9");
        $obSheet->mergeCells("R8:R9");
        $obSheet->mergeCells("S8:S9");
        $obSheet->mergeCells("T8:T9");
        $obSheet->mergeCells("U8:U9");
        $obSheet->mergeCells("V8:V9");
        $obSheet->mergeCells("O10:O11");
        $obSheet->mergeCells("P10:P11");
        $obSheet->mergeCells("Q10:Q11");
        $obSheet->mergeCells("R10:R11");
        $obSheet->mergeCells("S10:S11");
        $obSheet->mergeCells("T10:T11");
        $obSheet->mergeCells("U10:U11");
        $obSheet->mergeCells("V10:V11");

        //目前还不知道字的间距 就用空格隔开了,欢迎大神指教
        $obSheet->setCellValue("H4","客户")->getStyle(\'H4\')->getFont()->setBold(true)->setSize(15)->getColor()->setRGB(\'696969\');//向单元格内添加内容
        $obSheet->setCellValue("H6","项          目")->getStyle(\'H6\')->getFont()->setBold(true)->setSize(20)->getColor()->setRGB(\'696969\');//加粗
        $obSheet->setCellValue("H20","人民币")->getStyle(\'H20\')->getFont()->setBold(true)->setSize(20)->getColor()->setRGB(\'696969\');
        $obSheet->setCellValue("J20","十          万          一          百         圆         角          分")->getStyle(\'J20\')->getFont()->setBold(true)->setSize(20)->getColor()->setRGB(\'696969\');
        $obSheet->setCellValue("M6","数     量")->getStyle(\'M6\')->getFont()->setBold(true)->setSize(20)->getColor()->setRGB(\'696969\');
        $obSheet->setCellValue("O6","金     额")->getStyle(\'O6\')->getFont()->setBold(true)->setSize(15)->getColor()->setRGB(\'696969\');
        $obSheet->setCellValue("O8","百")->getStyle(\'O8\')->getFont()->setBold(true)->setSize(15)->getColor()->setRGB(\'696969\');
        $obSheet->setCellValue("W6","备注")->getStyle(\'W6\')->getFont()->setBold(true)->setSize(15)->getColor()->setRGB(\'696969\');

        $obSheet->getColumnDimension(\'O\')->setWidth(3);//设置单元格宽度
        $obSheet->getColumnDimension(\'P\')->setWidth(3);
        $obSheet->getColumnDimension(\'Q\')->setWidth(3);
        $obSheet->getColumnDimension(\'R\')->setWidth(3);
        $obSheet->getColumnDimension(\'S\')->setWidth(3);
        $obSheet->getColumnDimension(\'T\')->setWidth(3);
        $obSheet->getColumnDimension(\'U\')->setWidth(3);
        $obSheet->getColumnDimension(\'V\')->setWidth(3);

        /**
         *向单元格中插入照片
         **/
//        $objDrawing = new \\PHPExcel_Worksheet_Drawing();//实例化插入图片类
//        $objDrawing->setPath(\'./5d282e5928206.png\');//设置图片路径
//        $objDrawing->setHeight(108);//图片高度
//        $objDrawing->setWidth(312); //照片宽度
//        $objDrawing->setCoordinates("A1");//图片插入的位置
//        $objDrawing->setOffsetX(12);//图片X轴的偏移量
//        $objDrawing->setOffsetY(12);//图片Y轴的偏移量
//        $objDrawing->setWorksheet($obSheet);//不知道干啥的,反正不写这一步图片就插不进去
//        $obSheet->setCellValue("A1","xxxxxxxxxxx\\n xxxxxxxxxx");//如果要自己在单元格内打断文字的话加个\\n,然后加上下面那句,就能打断文字了
//        $objPHPExcel->getActiveSheet()->getStyle(\'A1\')->getAlignment()->setWrapText(true);//设置自动换行,与上面的呼应
        /**
         *设置表格中的单元格全部带边框
         **/
        $styleThinBlackBorderOutline = array(
            \'borders\' => array(
                \'allborders\' => array( //设置全部边框
                                       \'style\' => \\PHPExcel_Style_Border::BORDER_THIN //粗的是thick
                ),
            ),
        );
        $objPHPExcel->getActiveSheet()->getStyle( \'H4:W23\')->applyFromArray($styleThinBlackBorderOutline); //设置区域

        /**
         *第五步:设置header头,包括设置Excel文件格式,是Excel2005还是Excel2007,文件名等等
         **/
        ob_end_clean();//清除缓冲区,避免乱码
        header(\'Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\');
        header(\'Content-Disposition: attachment;filename="\'.date(\'Y-m-d\',time()).\'.xlsx"\');
        header(\'Cache-Control: max-age=0\');

        /**
         *第六步:将上面做的表格内容写入到Excel文件中,并设置文件格式
         **/
        $objWriter = \\PHPExcel_IOFactory::createWriter($objPHPExcel,\'Excel2007\');

        /**
         *第七步:使用户下载
         *一定记得要写上最后那一句exit,不然导出的文件打开时会提示错误
         **/
        $objWriter->save(\'php://output\');
        exit;
    }

 

 

3、效果如图(半成品,太懒了)

 

 

 

 

 

以上是关于PHP导出指定格式excel的主要内容,如果未能解决你的问题,请参考以下文章

php控制导出excel的单元格格式

使用 php excel 导出到 excel 到最直接的工作表

php怎么导出大量数据的Excel,phpexcel

导出具有指定日期格式的 Excel 工作表单元格

php怎么导出大量数据的Excel

php 导出Excel