因为实际情况的需要,导出excel表格在后台开发的过程中会经常用到。下面是我在实际应用中自己整理的一个导出excel类,需要PHPExcel支持,本类很好的完成导出表格的基本样式,保存路径,切换工作薄写入的功能,希望对大家有所帮助。

1:需要PHPExcel支持

2:导出可以自动切换工作薄,默认一个工作薄2000行,测试发现5000条左右的数据导出可能失败并且导出时间较长,

切换工作薄可以提高成功率,并且方便阅读

3:导出需要传必要参数,返回值是保存的后的excel地址,链接即可下载

 <?php
/**
* 公共的导出类@author:zhaoyaei
* $column :导出的第一行标题
* $result :需要导出的结果集
* $path :导出文件的保存路径
* $sheet_num :每个工作薄的最大行数(可选)
* @return :保存的地址
*/
class Export{ public function __construct(){
//初始化类,引入相关类文件
include "PHPExcel.php";
include "PHPExcel/IOFactory.php";
} //导出设置
public function createxcel($column,$result,$path,$sheet_num = null){
//检查数据的合法性
if(empty($column) || empty($path) || $path == "" || empty($result)){
return false;
} //如果数据较大,则分薄导出
if(empty($sheet_num) || $sheet_num <= 0){
$sheet_num = 2000;
} $path = $this->check_encod("GBK",$path);
//创建PHPExcel实例
$objPHPExcel = new \PHPExcel();
//总数据行数和数据列数
$arr_num = count($result);
$field_count = count($column);
//工作薄数目,工作薄数量太多,可以调节煤业导出的数据条数减少工作薄数目
$get_num = ceil($arr_num / $sheet_num);
if($get_num > 20){
return false;
} //生成列信息
$ary = array("", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
for($i = 1;$i <= $field_count; $i++){
$ary_info[$i] = $ary[$i/27].$ary[$i%27];
$fieldwidth[$i-1] = 20; //设置列宽默认是20
} //循环每个工作薄
for($sheet = 0;$sheet < $get_num; $sheet++){
//创建工作薄,设置起始工作薄
$objPHPExcel->createSheet($sheet);
$Sheet = $objPHPExcel->setActiveSheetIndex($sheet);
//设置工作薄样式
$i = 1;
foreach ($column as $key => $value){
//设置第一行的值
$Sheet->setCellValue($ary_info[$i] .'1', $value);
//设置第一行加粗
$objPHPExcel->getActiveSheet()->getStyle($ary_info[$i] .'1')->getFont()->setBold(true);
//设置行宽
$objPHPExcel->getActiveSheet()->getColumnDimension($ary_info[$i] )->setWidth($fieldwidth[$i-1]);
$i = $i + 1;
} //每个工作薄开始的行数
$hang_num = 2;
//本工作薄结束行数开始为0
$end_num = 0;
//start_num本工作薄开始行数
$start_num = $sheet*$sheet_num;
//计算出每次导出的开始行数和结束行数(多工作薄导出)
if($arr_num > ($start_num + $sheet_num)){
$end_num = $start_num + $sheet_num;
}else{
$end_num = $arr_num;
} //循环行数
for($i = $start_num; $i < $end_num; $i++){
//循环列数
for($j = 1;$j <= $field_count; $j++){
//写入数据
$Sheet->setCellValue($ary_info[$j].($hang_num)," ".$result[$i][$j]);
}
$hang_num++;
}
//设置sheet的名称
$objPHPExcel->getActiveSheet($sheet)->setTitle('sheet'.$sheet,$sheet);
//设置sheet的起始位置
$objPHPExcel->setActiveSheetIndex($sheet);
} //通过PHPExcel_IOFactory的写函数将上面数据写出来
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
//设置时区
date_default_timezone_set("Asia/Shanghai");
//保存并返回保存路径
$objWriter->save($path);
return $this->check_encod("utf-8",$path);
} public function check_encod($encod,$string){
//判断字符编码
$encode = mb_detect_encoding($string, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
if($encode != $encod){
$string = iconv($encode, $encod, $string);
}
return $string;
}
}
?>

php导出excel封装类的更多相关文章

  1. 022医疗项目-模块二:药品目录的导入导出-对XSSF导出excel类进行封装

    资源全部来源于传智播客. 好的架构师写的程序,就算给刚入门的新手看,新手一看就知道怎么去用.所以我们要对XSSF导出excel类进行封装.这是架构师的工作,但我们也要知道. 我们写一个封装类: 这个类 ...

  2. POI通过模板导出EXCEL文件

    一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中 ...

  3. C#使用Aspose.Cells导出Excel简单实现

    首先,需要添加引用Aspose.Cells.dll,官网下载地址:http://downloads.aspose.com/cells/net 将DataTable导出Xlsx格式的文件下载(网页输出) ...

  4. 利用poi导出Excel

    import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.r ...

  5. [django]数据导出excel升级强化版(很强大!)

    不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...

  6. NPOI导出Excel

    using System;using System.Collections.Generic;using System.Linq;using System.Text;#region NPOIusing ...

  7. ASP.NET Core 导入导出Excel xlsx 文件

    ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...

  8. asp.net DataTable导出Excel 自定义列名

    1.添加引用NPOI.dll 2.cs文件头部添加 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.IO; 3.代码如 ...

  9. Aspose.Cells导出Excel(1)

    利用Aspose.Cells导出excel 注意的问题 1.DataTable的处理 2.进行编码,便于中文名文件下载 3.别忘了Aspose.Cells.dll(可以自己在网上搜索) public ...

随机推荐

  1. iOS开发——OC基础-ARC、BLOCK、协议

    一.ARC ARC 是一种编译器特性!而不是IOS运行时特性,和JAVA中得垃圾回收机制完全不一样ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的 ...

  2. Pragma如何分组

    Pragma Pragma Mark #pragma mark - 是一个在类内部组织代码并且帮助你分组方法实现的好办法. 我们建议使用 #pragma mark - 来分离: 不同功能组的方法 pr ...

  3. 一颗躁动的心---下决心从SLAM开始,不钻研嵌入式底层了

    在写这个随笔时,北京的外面正在下2016的第一场雪.夜深人尽之时总会考虑一下自己的未来在何方. 长这么大了,我发现我这人始终不能坚定不移的朝着一个方向努力,总是朝三暮四,对学习更是朝令夕改,这造成了我 ...

  4. Hashtable和HashMap类的区别

    Hashtable和HashMap类有三个重要的不同之处.第一个不同主要是历史原因.Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现. ...

  5. super用法和继承中的构造方法

    当new出来一个对象的时候,  this是只想对象本身. 在存在继承关系时, 在子类中用super表示引用父类中的东西. 子类的构造过程必须调用父类的构造方法. 子类中包含父类,所以子类中一定要先调用 ...

  6. LinearLayout

    概念: LinearLayout是一种线性布局,他会将控件在水平和垂直方向做线性排列 官方文档: http://developer.android.com/guide/topics/ui/layout ...

  7. HTML 返回顶部的样式

    .fhdb{ width:50px; height:50px; position:fixed;   //可以用来定义元素的固定定位. right:20px;      //距离右侧20像素 botto ...

  8. Java 中常用缓存Cache机制的实现《二》

    所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. AD: Cache 所谓缓存,就是将程序或系统经常要 ...

  9. 查看Android应用包名package和入口activity名称

    使用android自动化测试工具启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法: 方法一:使用aapt    //aa ...

  10. ios Coredata 的 rollback undo 等事物处理函数

    首先说明 ios 中 NSManagedObjectContext 默认的 undoManager是nil的,就是说 undo 和 redo 都是没用的. 但是 rollback函数和reset函数是 ...