• PHPExcel导入导出常用方法总结


    最近公司后台管理系统需求,要用PHP导出excel表格数据,所以特整理了一下常用的方法供大家参考:

    PHPExcel扩展包地址:https://github.com/wanqianworld/phpexcel-1.8

    大致的分为几个部分:

    一、导出的方法及步骤

    1.引入PHPExcel文件:require_once("../Classes/PHPExcel.php");
    2.实例化PHPExcel:$ObjPHPExcel = new PHPExcel();
    3.获取当前工作sheet:$ObjPHPExcel->getACtiveSheet();
    4.给当前工作表设置名称:$ObjPHPExcel->setTitle('sheet表名称');
    5.添加数据,赋值:$ObjPHPExcel->setCellValue('单元格坐标','值');
    6.按照指定格式生成excel文件: $ObjPHPExcel->PHPExcel_IOFactory::createWriter($ObjPHPExcel,'Excal5');
    7.保存Excel文件:$ObjPHPExcel->save('保存路径及文件名');
    8.如果要将生成的Excel文件输出到浏览器:
            Excel5需要添加以下代码:
             header("Content-type:application/vnd.ms-excel");//输出Excel03文件
             header("Content-Disposition:attachment;filename=test.xls');
             header("Content-Control:max-age = 0");
            $ObjPHPExcel->save("php://output");
            Excel7需要添加以下代码:
             header("Content-type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");//输出Excel07文件
             header("Content-Disposition:attachment;filename=test.xlsx');//浏览器输出文件名称
             header("Content-Control:max-age = 0");//禁止浏览器缓存
            $ObjPHPExcel->save("php://output");

    二、Excel样式控制

    1.合并单元格:$ObjPHPExcel->getActiveSheet()->mergeCells('A18:E22');
    2.拆分单元格:$ObjPHPExcel->getActiveSheet()->unmergeCells('A18:E22');
    3.设置默认单元格水平方向居中:$ObjPHPExcel->getDefaultStyle()->getAlignment()->setHorizontal( PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
    4.设置默认单元格垂直方向居中:$ObjPHPExcel->getDefaultStyle()->getAlignment()->setvertical( PHPExcel_Style_Alignment::VERTICAL_CENTER);
    5.设置默认字体样式:字体类型: $ObjPHPExcel->getDefaultStyle()->getFont()->setName('微软雅黑');
            字体大小:$ObjPHPExcel->getDefaultStyle()->getFont()->setSize(14);
    6.设置指定字体样式:$ObjPHPExcel->getStyle('A18:E22')->getFont()->setName('微软雅黑');
            字体大小:$ObjPHPExcel->getStyle('A18:E22')->getFont()->setSize(14);
    7.设置背景颜色:填充方式(完全填充):$ObjPHPExcel->getStyle('B2')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
            填充颜色:$objPHPExcel->getStyle('B2')->getFill()->getStartColor()->setARGB('FFFF0000');
    8.设置边框:
        $styleArray = array(
            'borders' => array(
                'outline' => array(
                    'style' => PHPExcel_Style_Border::BORDER_THICK,
                    'color' => array('argb' => 'FFFF0000'),
                ),
            ),
        );
        $objWorksheet->getStyle('B2:G8')->applyFromArray($styleArray);
        调用getStyle()方法的,参数都可以通过数组的方式传入。
    9.自动换行:
      开启自动换行:$objPHPExcel->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true); 在需要换行的值中添加 ,然后才能自动换行:$objPHPExcel->getActiveSheet()->getCell('A1')->setValue("hello world"); 10.设置单元格格式:
      设置单元格格式为字符串(解决身份证活手机号格式为科学记数法):$objPHPExcel->getActiveSheet()->getCell('A1')->setValueExplicit('25', PHPExcel_Cell_DataType::TYPE_STRING);

    三、添加图片、标注

    1.添加图片:
            $ObjSheet = $ObjPHPExcel->getActiveSheet();////获取当前sheet表
            $ObjDrawing = new PHPExcel_WorkSheet_Drawing();//获取一个图片的操作对象
            $ObjDrawing->setPath("图片路径");//加载图片路径
            $ObjDrawing->setCoordinates('F5');//设置图片插入左上角坐标
            $ObjDrawing->setWidth(500);//设置图片宽度(等比缩放)
            $ObjDrawing->setHeight(100);//设置图片高度(等比缩放)如果宽度和高度同时设置,图片会等比缩放两次,这里需要注意
            $ObjDrawing->setOffsetX(20);//设置单元格内偏移量,不能超过单元格宽度,否则无效
            $ObjDrawing->setOffsetY(20);//设置单元格内偏移量,不能超过单元格高度,否则无效
            $ObjDrawing->setWorkSheet($ObjSheet);//将图片插入到sheet中
    2.添加丰富文字块(即单元格内文字设置不同的样式)
            $ObjRichtext = new PHPExcel_RichText();//获得一个文字块操作对象
            $ObjRichtext->createText('文字内容');//添加正常的文字
            $ObjStyleFont = $ObjRichtext->createTextRun("需要修改格式的文字内容");//添加需要修改样式的文字
            $ObjStyleFont->getFont()->setSize(16)->setBold(True);//设置文字样式
            $ObjRichtext->createText('文字内容');//添加正常的文字
            $ObjSheet->getCell('A4')->setValue($ObjRichtext);//将文字块插入sheet中
    3.添加批注:(注:合并单元格添加注释功能Excel2007以上才支持)
            $ObjSheet->getComment("F4")->gettext()->createTextRun('批注内容');
    4.超链接:
            $ObjSheet->setCellValue('B1','百度');
            $ObjSheet->getCell('B1')->getHyperlink()->setUrl("https://www.baidu.com");
    四、生成图形报表(折线、饼状、柱状、区域等等)
        这块的内容比较多,日常用到可能比较少,我就没有给大家总结,不过可以详见PHPExcel扩展包中Examples目录下的实例PHP文件,有很多demo,注释也很清楚。
     
    五、Excel导入文件(全部加载)
    1.引入PHPExcel导出文件:require_once("../Classes/PHPExcel/IOFactory.php");
    2.加载需要Excel的Excel文件:$ObjPHPExcel->PHPExcel_IOFactory::load($filename);
    3.获取excel文件中有多少个sheet:$sheetCount = $ObjPHPExcel->getSheetCount();
    4.遍历sheet,将所有sheet中的数据组成数组:
        for($i=0;$i<$sheetCount;$i++){
            $dataArray = $ObjPHPExcel->getSheet($i)->toArray();
        }
    5.上边方法只能获取Excel中所有数据,如过需要筛选数据,方法如下:
        foreach$ObjPHPExcel->getWorksheetIterator  as  $sheet){
                foreach($ObjPHPExcel->getRowIterator  as  $row ){
                        if($row->getRowIndex() < 3){
                                continue;
                        }//获取行号,只获取第三行之后的数据
                        foreach($ObjPHPExcel->getCellIterator  as $cell){
                                $data = $cell->getValue();//获取单元格数据
                        }
                }
        }

    六、Excel导入文件(部分加载)

    1.获取excel文件类型(xlsxlsx...):$file_type = PHPExcel_IOFactory::identify($filename);
    2.获取文件读取操作对象:$objReader = PHPExcel_IOFactory::createReader($file_type);
    3.指定需要加载sheet的名称:$sheetName = arrat('sheet1','sheet2');
    4.根据sheet名称加载数据:$objReader->setLoadSheetsOnly($sheetName);

    必须要注意的的是PHPExcel对内存占用很大,在不进行特殊设置的情况下,phpExcel将读取的单元格信息保存在内存中,一个单元格大概占用1KB。

    为了应对内存占用的问题:

    1.可以使用PHPExcel_Settings::setCacheStorageMethod() 来设置不同的缓存方式,已达到降低内存消耗的目的!需要注意的是:必须在new PHPExcel对象之前添加。
    2.将单元格数据序列化后保存在内存中     
      PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized; 3.将单元格序列化后再进行Gzip压缩,然后保存在内存中
      PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip; 4.缓存在临时的磁盘文件中,速度可能会慢一些
      PHPExcel_CachedObjectStorageFactory::cache_to_discISAM; 5.保存在php://temp   PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp; 6.保存在memcache中
      PHPExcel_CachedObjectStorageFactory::cache_to_memcache。

    举两个应对内存占用问题的小例子:

    eg1:
            $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;//选择缓存方式
            $cacheSettings = array('memoryCacheSize'=>'16MB');//缓存设置
            PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);//设置缓存
            $objPHPExcel = new PHPExcel();
    eg2:
        $cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache;//选择缓存方式
        $cacheSettings = array(
                'memcacheServer' => 'localhost',
                'memcachePort' => 11211,
                'cacheTime' => 600
        );//memcache缓存设置
        PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);//设置缓存

    这些基本能满足日常开发需要,如果要更复杂的需求,大家可以详见PHPExcel扩展包中Examples目录下的实例PHP文件,有很多demo,注释也很清楚。或者翻阅PHPExcel的官方文档。

     
     
  • 相关阅读:
    Excel文档间的数据替换 ---电脑版APP 自动操作魔法师
    【css】zSass
    【javascript】利用 a 标签自动解析 url
    【javascript】console 让 js 调试更简单
    【规范】javascript 变量命名规则
    【规范】前端编码规范——一般规范
    【jquery】一款不错的音频播放器——Amazing Audio Player
    【分享】分享一款不错的网页视频播放器
    【分享】分享一个值得前端开发收藏的网站
    【html】button按钮的一些问题
  • 原文地址:https://www.cnblogs.com/yuanwanli/p/12617066.html
Copyright © 2020-2023  润新知