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);
   在需要换行的值中添加\n,然后才能自动换行:$objPHPExcel->getActiveSheet()->getCell(‘A1‘)->setValue("hello\nworld");
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文件类型(xls\xlsx...):$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的官方文档。

原文地址:https://www.cnblogs.com/yuanwanli/p/12617066.html

时间: 2024-11-13 04:51:28

PHPExcel导入导出常用方法总结的相关文章

PHPExcel导入导出

慕课教程 -- PHPExcel导入导出 一.PHPExcel导出操作 1.快速入门 <?php #找到当前脚本的路径 $dir = dirname(__FILE__); #引入PHPExcel插件文件 require $dir."/excel/PHPExcel.php"; #实例化PHPExcel类 $objPHPExcel = new PHPExcel(); #获得当前活动sheet的操作对象 $objSheet = $objPHPExcel->getActiveShe

使用PHPExcel导入导出excel格式文件

使用PHPExcel导入导出excel格式文件 作者:zccst 由于导出使用较多,下面是导出实现过程. 第一步,将PHPExcel的源代码复制到项目的lib下 文件包括:PHPExcel.php 和 文件夹PHPExcel 源代码见附件 注1:源代码是zip格式,能在windows和linux通用. 注2:PHPExcel.zip是干净代码,可以直接引用.PHPExcel2.zip有svn记录,不适合直接引用. 第二步:在需要导出的handler页面中引用 1,在头部引入三个文件 Php代码 

thinkphp5 使用PHPExcel 导入导出

首先下载PHPExcel类.网上很多,自行下载. 然后把文件放到vendor文件里面. 一般引用vendor里面的类或者插件用vendor(); 里面加载的就是vendor文件,然后想要加载哪个文件,直接写就行,中间的"."相当于文件路径的"/". 例如加载excel5这个文件: 先把html代码贴出来(整个导入导出的): <form enctype="multipart/form-data" method="post"

phpexcel 导入导出

导出excel /** * 以下是使用示例,对于以 //// 开头的行是不同的可选方式,请根据实际需要 * 打开对应行的注释. * 如果使用 Excel5 ,输出的内容应该是GBK编码. */ //require_once 'PHPExcel.php'; // uncomment ////require_once 'PHPExcel/Writer/Excel5.php'; // 用于其他低版本xls // or ////require_once 'PHPExcel/Writer/Excel200

thinkphp上传至服务器后PhpExcel导入导出的若干问题

在将tp5项目上传到服务器后,原来的系统有部分功能无法实现,在批量到如时报错 mkdir(): Device or resource: 查看了一下这是权限的问题,因此打开服务器中的项目,将controller控制器中的导入代码的文件位置进行修改: 这里改为你自己定义的文件夹位置. 点开文件夹属性->安全 设置此文件夹可以让所有用户读取和写入. 设置完成再次点击导入,发现报错: Warning: "continue" targeting switch is equivalent t

PHP导入导出excel表格图片(转)

写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用过,csv的就更不用谈了.呵呵.(COM方式不讲了,这种可读的太多了,我也写过利用wps等进行word等的生成之类的文章 )但是在读的时候,只用过一种,具体是什么忘了,要回去翻代码了.基本上导出的文件分为两种:1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件.优

PHP导入导出Excel方法

看到这篇文章的时候,很是惊讶原作者的耐心,虽然我们在平时用的也 有一些,但没有作者列出来的全,写excel的时候,我用过pear的库,也用过pack压包的头,同样那些利用smarty等作的简单替换xml的也用 过,csv的就更不用谈了.呵呵.(COM方式不讲了,这种可读的太多了,我也写过利用wps等进行word等的生成之类的文章 )但是在读的时候,只用过一种,具体是什么忘了,要回去翻代码了.因为采用的是拿来主义,记不住.原文地址:http://xinsync.xju.edu.cn/index.p

PHP使用PHPEXCEL导入Excel

下载PHPEXCEL 后放到项目里. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 public function InExcel() {     //设定缓

PHP导入导出Excel方法小结

基本上导出的文件分为两种: 1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件.优点:简单.缺点:难以生成格式,如果用来导入需要自己分别编写相应的程序.2:Excel格式,与类Excel相对应,这种方法生成的文件更接近于真正的Excel格式. 如果导出中文时出现乱码,可以尝试将字符串转换成gb2312,例如下面就把$yourStr从utf-8转换成了gb2312:$yourS