PHP输出Excel PHPExcel的方法


Posted in PHP onJuly 26, 2018

本文实例为大家分享了PHP输出Excel PHPExcel的具体代码,供大家参考,具体内容如下

方法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中。

PHP输出Excel PHPExcel的方法

/*
  PHPExcel
 */
 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);//设置某列单元格格式为文本格式,便于禁用科学计数法

  /*数组配置*/
  $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()里可以直接填写保存路径

}

自定义的浏览器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中文文档有很多参考资料。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php下通过IP获取地理位置的代码(小偷程序)
Jun 09 PHP
php中判断字符串是否全是中文或含有中文的实现代码
Sep 16 PHP
php表单请求获得数据求和示例
May 15 PHP
教你如何开启shopnc b2b2c 伪静态
Oct 21 PHP
php 5.6版本中编写一个PHP扩展的简单示例
Jan 20 PHP
php实现的网络相册图片防盗链完美破解方法
Jul 01 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
Jul 01 PHP
关于php 高并发解决的一点思路
Apr 16 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
PHP+Redis开发的书签案例实战详解
Jul 09 PHP
PHP const定义常量及global定义全局常量实例解析
May 28 PHP
PHP微信H5支付开发实例
Jul 25 #PHP
php app支付宝回调(异步通知)详解
Jul 25 #PHP
php支付宝APP支付功能
Jul 29 #PHP
PHP多个图片压缩成ZIP的方法
Aug 18 #PHP
PHP上传文件及图片到七牛的方法
Jul 25 #PHP
详解PHP版本兼容之openssl调用参数
Jul 25 #PHP
PHP实现的多维数组去重操作示例
Jul 21 #PHP
You might like
PHP获取网卡地址的代码
2008/04/09 PHP
php下删除字符串中HTML标签的函数
2008/08/27 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
一个简单的网站访问JS计数器 刷新1次加1次访问
2012/09/20 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
基于JQuery实现分隔条的功能
2016/06/17 Javascript
domReady的实现案例
2016/11/23 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
深入浅析Python字符编码
2015/11/12 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
基于python时间处理方法(详解)
2017/08/14 Python
python保存网页图片到本地的方法
2018/07/24 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
简单了解python中的与或非运算
2019/09/18 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
Python调用.net动态库实现过程解析
2020/06/05 Python
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
什么是方法的重载
2013/06/24 面试题
2015学校图书管理员工作总结
2015/05/11 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android