封装读取excel内容方法
    /**
* 获取Excel内容
* @param type $filename
* @return type
*/
public function getExcelContent($filename) {
//读取内容
$objPHPExcel = \PHPExcel_IOFactory::load($filename);
$objPHPExcel->setActiveSheetIndex(0);
$sheet1 = $objPHPExcel->getSheet(0);
//获取行数,并把数据读取出来$data数组
$rowCount = $sheet1->getHighestRow(); //excel行数
$data = array();
$this->column = 100; //最大列数
for ($i = 1; $i <= $rowCount; $i++) {
for ($j = 0; $j < $this->column; $j++) {
$value = (string)$sheet1->getCellByColumnAndRow($j, $i)->getValue();
if ($i == 1 && empty($value)) {
$this->column = $j; //当第一列遇到空的时候替换最大列数
} else {
$data[$i - 1][$j] = $value; //获取每一列的值
}
}
}
return $data;
}
封装excel导出方法
<?php

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/ namespace app\common\model; use think\Model;
use think\Db; /**
* Description of OrderSourceController
*
* @author zhangjx <zhangjx882@sina.com>
* @date 2017-9-8
*/
class Excel extends Model {
/**
* Excel列数getExcelContent()专用
*/
protected $column; private function checkExcel($fileName, $fileAddress, $loadFileAddress){
if (empty($fileName))
return false;
set_time_limit(0);
ini_set('memory_limit', '512M');
// 检测文件夹如果不存在就生成
Directory($fileAddress);
vendor('excel.PHPExcel');
// $cacheMethod = \PHPExcel_CachedObjectStorageFactory::cache_in_memory;
// $cacheSettings = array('memoryCacheSize'=>'50MB');
// \PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
if ($loadFileAddress == null) {
$objPHPExcel = new \PHPExcel();
} else {
$objReader = \PHPExcel_IOFactory::createReader("Excel2007");
$objReader->setIncludeCharts(TRUE);
$objPHPExcel = $objReader->load($loadFileAddress);
} return $objPHPExcel;
} /**
* 导出excel 公共方法 若表头一致可采用
* @param array $xlsCellName excel表列名
* @param array $xlsCellValue excel表列值
* @param string $fileName 文件名称
* @param string $fileAddress 文件保存地址
* @param integer $beginNum 开始写数据的行数
* @param null $loadFileAddress 是否读取其他文件作为模板配置
* @return string
*/ public function exportExcel($xlsCellName, $xlsCellValue, $fileName, $fileAddress, $beginNum = 1, $loadFileAddress = null) {
$objPHPExcel = $this->checkExcel($fileName, $fileAddress, $loadFileAddress); // 合并数据
$xlsData = array_merge(array($xlsCellName), $xlsCellValue); foreach ($xlsData as $num => $data) {
$row = $num + $beginNum;
$chr = 0;
foreach ($data as $val) {
$col = self::IntToChr($chr);
$chr++;
$objPHPExcel->getActiveSheet(0)->setCellValue($col . $row, $val);
}
} header('pragma:public');
header('Content-type:application/vnd.ms-excel;charset=utf-8;name="' . $fileName . '.xls"');
header("Content-Disposition:attachment;filename=$fileName.xls"); //attachment新窗口打印inline本窗口打印
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
// $objWriter->save('php://output');
$objWriter->save($fileAddress . $fileName . '.xls');
return $_SERVER['REQUEST_SCHEME'] . "://" . $_SERVER['HTTP_HOST'] . ltrim($fileAddress, '.') . $fileName . '.xls'; //增加后缀
} /**
* 数字转字母 (类似于Excel列标)
* @param integer $index 索引值
* @param integer $start 字母起始值
* @return String 返回字母
*/
public static function IntToChr($index, $start = 65) {
$str = '';
if (floor($index / 26) > 0) {
$str .= self::IntToChr(floor($index / 26) - 1);
}
return $str . chr($index % 26 + $start);
}

实际业务中,会有多处列表需要用到导出和导入功能,如果不是特殊表头情况下可以考虑采用统一的方法,需要使用的地方直接调用

这样可以节省很多代码,而且使用起来会很方便

封装excel导出方法的更多相关文章

  1. .NET Excel导出方法及其常见问题详解

    摘要:.NET Excel导出方法及其常见问题详解. 一.Excel导出的实现方法 在.net 程序开发中,对于Excel文件的导出我们一共有三种导出方式: 利用文件输出流进行读写操作 这种方式的导出 ...

  2. PHP封装Excel表方法使用流程

    今天总结了一下Excel表的封装和导出使用,原理 经常使用与一些日常报表, 数据报表, 实现方法比较简单, 一次封装, 简单的方法调用,简单~ 废话不多说,直接入正题, 先说下重要的参数要记住的东西 ...

  3. 超级好用的excel导出方法,比phpexcel快n倍,并且无乱码

    public function exportToExcel($filename, $tileArray=[], $dataArray=[]){ ini_set('memory_limit','512M ...

  4. java反射学习之二万能EXCEL导出

    一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...

  5. vue2 Excel导出数据 js-xlsx的使用

    vue2 Excel导出数据 js-xlsx的使用 https://www.jianshu.com/p/ea115a8e9107 小世界最温暖 关注 2018.11.19 16:08 字数 280 阅 ...

  6. 懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法

    在开发的过程中,我们为了节约时间,往往会将大量重复机械的代码封装,考虑代码的复用性,这样我们可以节约很多时间来做别的事情.最近跳槽到一节webform开发的公司,主要是开发自己公司用的ERP.开始因为 ...

  7. 懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法

       懒人小工具2:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法    github地址:https://github.com/Jimmey-Jiang/J ...

  8. MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult

    导出EXCEL方法总结 MVC导出数据到EXCEL的方法有很多种,常见的是: 1.采用EXCEL COM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可: 优点:可设置丰富的EXC ...

  9. HTML Table导出为Excel的方法

    HTML Table导出为Excel的方法: 直接上源码 <html> <head> <meta http-equiv="Content-Type" ...

随机推荐

  1. noip15

    童话故事专场 T1 首先,dead line 是一条直线,而不是线段.考试的时候一直以为是线段,那么横竖共有n+m条,考虑斜着的,斜着的交点为有穷的,则需要满足斜率不同,那么只需要统计一边的,再乘2就 ...

  2. Docker创建seafile搭建私有云

    docker-compose.yml version: '2.0' services: db: image: mariadb:10.1 container_name: seafile-mysql en ...

  3. 深层剖析鸿蒙轻内核M核的动态内存如何支持多段非连续性内存

    摘要:鸿蒙轻内核M核新增支持了多段非连续性内存区域,把多个非连续性内存逻辑上合一,用户不感知底层的不同内存块. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列九 动态内存Dynamic Mem ...

  4. 如果被问到 HTTP 协议,你真的能讲清楚吗?

    前段时间,在和许久未见的老同学聊天时,突然被问到 http 协议到底是什么?脑海里面第一时间想起来的就是 request 请求.response 响应之类的词汇,但是这样讲他真的能知道是什么吗?我反问 ...

  5. vue--三种组件中之间的传值

    参考网址:https://www.jianshu.com/p/46573a741c29 一.父子组件之间的传值----props/$emit 组件之间的传值,我们比较常用到的是props/$emit ...

  6. WPF---数据绑定之PasswordBox绑定(八)

    一.概述 众所周知,绑定的源既可以是依赖属性也可以是普通的CLR属性,而绑定的目标只能是依赖属性. 控件PasswordBox的Password属性不是依赖属性,不可以作为绑定的目标与后台数据进行绑定 ...

  7. jQuery中的常用方法:empty()、each()、$.each()、$.trim()、focus()(二)

    <!DOCTYPE html> <html> <head> <title>02_commonMethod.html</title> < ...

  8. 使用dom4j工具:获取xml中的标签属性(三)

    package dom4j_read; import java.io.File; import java.util.List; import org.dom4j.Attribute; import o ...

  9. 去除所有js,html,css代码

    <?php$search = array ("'<script[^>]*?>.*?</script>'si", // 去掉 javascript ...

  10. 并发编程之:Lock

    大家好,我是小黑,一个在互联网苟且偷生的农民工. 在之前的文章中,为了保证在并发情况下多线程共享数据的线程安全,我们会使用synchronized关键字来修饰方法或者代码块,以及在生产者消费者模式中同 ...