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下HTTP Response中的Chunked编码实现方法
Nov 19 PHP
php 生成文字png图片的代码
Apr 17 PHP
PHP下通过exec获得计算机的唯一标识[CPU,网卡 MAC地址]
Jun 09 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
Netbeans 8.2与PHP相关的新特性介绍
Oct 08 PHP
解决出现SoapFault (looks like we got no XML document)的问题
Jun 24 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 PHP
php实现分页功能的详细实例方法
Sep 29 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 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
php生成PDF格式文件并且加密
2015/06/22 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
javascript的trim,ltrim,rtrim自定义函数
2008/09/21 Javascript
Jquery 弹出层插件实现代码
2009/10/24 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
JS中showModalDialog关闭子窗口刷新主窗口用法详解
2017/03/25 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
对python中 math模块下 atan 和 atan2的区别详解
2020/01/17 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
争当四好少年演讲稿
2014/09/13 职场文书
诉讼授权委托书
2014/10/15 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
mysql序号rownum行号实现方式
2022/12/24 MySQL