封装excel导出方法
封装读取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导出方法的更多相关文章
- .NET Excel导出方法及其常见问题详解
摘要:.NET Excel导出方法及其常见问题详解. 一.Excel导出的实现方法 在.net 程序开发中,对于Excel文件的导出我们一共有三种导出方式: 利用文件输出流进行读写操作 这种方式的导出 ...
- PHP封装Excel表方法使用流程
今天总结了一下Excel表的封装和导出使用,原理 经常使用与一些日常报表, 数据报表, 实现方法比较简单, 一次封装, 简单的方法调用,简单~ 废话不多说,直接入正题, 先说下重要的参数要记住的东西 ...
- 超级好用的excel导出方法,比phpexcel快n倍,并且无乱码
public function exportToExcel($filename, $tileArray=[], $dataArray=[]){ ini_set('memory_limit','512M ...
- java反射学习之二万能EXCEL导出
一.EXCEL导出的实现过程 假设有一个对象的集合,现在需要将此集合内的所有对象导出到EXCEL中,对象有N个属性:那么我们实现的方式是这样的: 循环这个集合,在循环集合中某个对象的所有属性,将这个对 ...
- vue2 Excel导出数据 js-xlsx的使用
vue2 Excel导出数据 js-xlsx的使用 https://www.jianshu.com/p/ea115a8e9107 小世界最温暖 关注 2018.11.19 16:08 字数 280 阅 ...
- 懒人小工具:自动生成Model,Insert,Select,Delete以及导出Excel的方法
在开发的过程中,我们为了节约时间,往往会将大量重复机械的代码封装,考虑代码的复用性,这样我们可以节约很多时间来做别的事情.最近跳槽到一节webform开发的公司,主要是开发自己公司用的ERP.开始因为 ...
- 懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法
懒人小工具2:T4自动生成Model,Insert,Select,Delete以及导出Excel的方法 github地址:https://github.com/Jimmey-Jiang/J ...
- MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult
导出EXCEL方法总结 MVC导出数据到EXCEL的方法有很多种,常见的是: 1.采用EXCEL COM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可: 优点:可设置丰富的EXC ...
- HTML Table导出为Excel的方法
HTML Table导出为Excel的方法: 直接上源码 <html> <head> <meta http-equiv="Content-Type" ...
随机推荐
- .Net Core with 微服务 - 分布式事务 - TCC
上一次我们讲解了分布式事务的 2PC.3PC .那么这次我们来理一下 TCC 事务.本次还是讲解 TCC 的原理跟 .NET 其实没有关系. TCC Try 准备阶段,尝试执行业务 Confirm 完 ...
- 题解—P2218 [HAOI2007]覆盖问题
一道不错的题,主要就是一个思路点,想到就行了,想不到就一直卡着. 看完题解之后发现挺简单,实际上自己挣扎半天也咩有想到. 一开始想类比成一维之后贪心,后来被同机房大佬 \(hack\) 掉了. sol ...
- 题解 Strange Housing
传送门 首先想了黑白染色,发现不会染 其实可以考虑如何动态地维护出这个点集 发现题面里对不在点集之中的点之间的连边没有要求 所以考虑不断向图中加点,为了满足要求,每次取一个与当前新图中相连的点 若它与 ...
- 【软件工具】Git 使用总结
本地库就是由 对象 和 引用 构成的,或者叫 Repositories;下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 ...
- 旧手机改造成web服务器并实现内网穿透
前几天由于gitee的审核引擎一通乱杀,使得gitee pages停止提供服务,心生更换服务器或者其他pages托管的想法,看了看价格感人的云服务器以及空空的钱包,这时,脑子有个奇怪的想法飘过,自己搞 ...
- 《深入浅出vue.js》阅读笔记之数组变化侦测
1.如何追踪变化 数组的侦测方式和对象不同,比如: this.list.push(1) 此时并不会像改变对象一样触发setter. 同理,要侦测数组的变化意味着我们在改变数组的时候得到通知,如图,我们 ...
- C#根据输入的字符串来创建类的实例
abstract class Vehicle { public abstract void Drive(); } class Car : Vehicle { public override void ...
- 解析一个HTML字符串
存在问题 来自用户输入,一个文件或一个网站的HTML字符串,你可能需要对它进行解析并取其内容,或校验其格式是否完整,或想修改它.怎么办?jsonu能够帮你轻松解决这些问题 解决方法 使用静态Jsoup ...
- java输入字符
1.创建一个Scanner对象. 2.调用.next()返回一个String类型用一个变量接受. 3.调用该String变量的.charAt(0),获取第一个字符. Scanner scn=new S ...
- String与Int类型的转换
http://blog.sina.com.cn/s/blog_4f9d6b1001000bfo.html int -> String int i=12345; String s="&q ...