php导出excel封装类

1:需要PHPExcel支持

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

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

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

  1 <?php
  2 /**
  3  * 公共的导出类@author:zhaoyaei
  4  * $column     :导出的第一行标题
  5  * $result     :需要导出的结果集
  6  * $path       :导出文件的保存路径
  7  * $sheet_num  :每个工作薄的最大行数(可选)
  8  * @return     :保存的地址
  9  */
 10 class Export{
 11
 12     public function __construct(){
 13         //初始化类,引入相关类文件
 14         include "PHPExcel.php";
 15         include "PHPExcel/IOFactory.php";
 16     }
 17
 18     //导出设置
 19     public function createxcel($column,$result,$path,$sheet_num = null){
 20         //检查数据的合法性
 21         if(empty($column) || empty($path) || $path == "" || empty($result)){
 22             return false;
 23         }
 24
 25         //如果数据较大,则分薄导出
 26         if(empty($sheet_num) || $sheet_num <= 0){
 27             $sheet_num = 2000;
 28         }
 29
 30         $path = $this->check_encod("GBK",$path);
 31         //创建PHPExcel实例
 32         $objPHPExcel = new \PHPExcel();
 33         //总数据行数和数据列数
 34         $arr_num     = count($result);
 35         $field_count = count($column);
 36         //工作薄数目,工作薄数量太多,可以调节煤业导出的数据条数减少工作薄数目
 37         $get_num     = ceil($arr_num / $sheet_num);
 38         if($get_num > 20){
 39             return false;
 40         }
 41
 42         //生成列信息
 43         $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");
 44         for($i = 1;$i <= $field_count; $i++){
 45             $ary_info[$i]     = $ary[$i/27].$ary[$i%27];
 46             $fieldwidth[$i-1] = 20; //设置列宽默认是20
 47         }
 48
 49
 50         //循环每个工作薄
 51         for($sheet = 0;$sheet < $get_num; $sheet++){
 52             //创建工作薄,设置起始工作薄
 53             $objPHPExcel->createSheet($sheet);
 54             $Sheet = $objPHPExcel->setActiveSheetIndex($sheet);
 55             //设置工作薄样式
 56             $i = 1;
 57             foreach ($column as $key => $value){
 58                 //设置第一行的值
 59                 $Sheet->setCellValue($ary_info[$i] .‘1‘, $value);
 60                 //设置第一行加粗
 61                 $objPHPExcel->getActiveSheet()->getStyle($ary_info[$i] .‘1‘)->getFont()->setBold(true);
 62                 //设置行宽
 63                 $objPHPExcel->getActiveSheet()->getColumnDimension($ary_info[$i] )->setWidth($fieldwidth[$i-1]);
 64                 $i = $i + 1;
 65             }
 66
 67             //每个工作薄开始的行数
 68             $hang_num  = 2;
 69             //本工作薄结束行数开始为0
 70             $end_num   = 0;
 71             //start_num本工作薄开始行数
 72             $start_num = $sheet*$sheet_num;
 73             //计算出每次导出的开始行数和结束行数(多工作薄导出)
 74             if($arr_num > ($start_num + $sheet_num)){
 75                 $end_num = $start_num + $sheet_num;
 76             }else{
 77                 $end_num = $arr_num;
 78             }
 79
 80             //循环行数
 81             for($i = $start_num; $i < $end_num; $i++){
 82                 //循环列数
 83                 for($j = 1;$j <= $field_count; $j++){
 84                     //写入数据
 85                     $Sheet->setCellValue($ary_info[$j].($hang_num)," ".$result[$i][$j]);
 86                 }
 87                 $hang_num++;
 88             }
 89             //设置sheet的名称
 90             $objPHPExcel->getActiveSheet($sheet)->setTitle(‘sheet‘.$sheet,$sheet);
 91             //设置sheet的起始位置
 92             $objPHPExcel->setActiveSheetIndex($sheet);
 93         }
 94
 95         //通过PHPExcel_IOFactory的写函数将上面数据写出来
 96         $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel5‘);
 97         //设置时区
 98         date_default_timezone_set("Asia/Shanghai");
 99         //保存并返回保存路径
100         $objWriter->save($path);
101         return $this->check_encod("utf-8",$path);
102     }
103
104     public function check_encod($encod,$string){
105         //判断字符编码
106         $encode = mb_detect_encoding($string, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
107         if($encode != $encod){
108             $string = iconv($encode, $encod, $string);
109         }
110         return $string;
111     }
112 }
113 ?>
时间: 2024-10-15 14:54:02

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

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

资源全部来源于传智播客. 好的架构师写的程序,就算给刚入门的新手看,新手一看就知道怎么去用.所以我们要对XSSF导出excel类进行封装.这是架构师的工作,但我们也要知道. 我们写一个封装类: 这个类单独有自己的main函数. 我们进入main函数一步一步看: public static void main(String[] args) throws Exception { /** 导出文件存放物理路径 * @param fileWebPath * 导出文件web下载路径 * @param fi

导出Excel工具类(一个主表多个明细表)

①ExcelData.java(Excel数据封装类) package com.kentra.util; import java.util.List; import java.util.Map; /**  *   * 描述:为导出Excel文件封装数据  * 封装Excel文件数据注意事项:  * 1.heads(标题行):是一个字符串, 标题与标题之间以逗号分隔如:hears="学号,姓名,性别"  * 2.data: 表示:主数据集合,data是个字符串集合,包含了所有主数据,集合

POI通过模板导出EXCEL文件

一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中的内容.样式.2.自己需要新增的内容.样式.),还需要设置单元格的样式,在网上搜了一些blog,完成后记录一下. 分析这次需求,最关键的就是如何获取到填充了模板的新HSSFWorkbook,如果获取到它,我们可以熟练的往里面添加内容. 1 File fi = new File("F:/usr/use

JAVA导出EXCEL实现

JAVA导出EXCEL实现的多种方式 java导出Excel的方法有多种,最为常用的方式就是使用第三方jar包,目前POI和JXL是最常用的二方包了,也推荐使用这两种. POI实现 POI这里不详细解释,可参考徐老师发的博客:http://blog.csdn.net/evangel_z/article/details/7332535,他利用开源组件POI3.0.2动态导出EXCEL文档的通用处理类ExportExcel,详细使用方法下载最新代码看看就可以里,徐老师写的很明了!总之思路就是用Ser

通用导出excel(可控制内容)

实体类 package util; import java.sql.Timestamp; public class Book { private int bookId; private String name; private String author; private float price; private String isbn; private String pubName; private Timestamp date; public Book() { } public Book(i

使用Apache POI导出Excel小结--导出XLS格式文档

使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI导出Excel小结--导出XLSX格式文档 使用Apache POI导出Excel--大数量导出 导出XLS格式文档 做企业应用项目难免会有数据导出到Excel的需求,最近在使用其,并对导出Excel封装成工具类开放出来供大家参考.关于Apache POI Excel基本的概念与操作我在这里就不啰嗦

利用poi导出Excel

import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.sql.Date;import java.util.ArrayList;import java.util.List; import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.

goalng导出excel(csv格式)

最近项目中有个小需求,需要将查询结果导出到excel.之间前java比较容易,使用POI很容易就能实现,查了下golang的文档,发现golang下边并没有导出excel的包,但是却有一个encoding/csv的包,看了下发现可以导出csv文件,大家都知道csv文件其实就是文本格式的excel文件,可以直接通过excel打开或是导入excel. 看起来挺好的,问题如愿解决,但是事实证明对已一个还不成熟的语言或是库最好还是先测一下的好.兴冲冲的卸了测试例子,成功导出了一个text.csv文件,一

java 操作 Excel,java导出excel

WritableWorkbook out = null; try { response.getServletResponse().reset(); ((HttpServletResponse) response.getServletResponse()).setHeader("Content-Disposition", "attachment;filename=export.xls"); response.getServletResponse().setConten