封装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" ...
随机推荐
- SpringBoot包扫描之多模块多包名扫描和同类名扫描冲突解决
前言 我们在开发springboot项目时候,创建好SpringBoot项目就可以通过启动类直间启动,运行一个web项目,非常方便简单,不像我们之前通过Spring+SpringMvc要运行启动一个w ...
- SQL 练习37
检索至少选修两门课程的学生学号 SELECT Student.SId,Student.Sname,选课数 from Student, (SELECT sid,COUNT(cid) 选课数 from s ...
- noip14
T1 考试假贪心,20pts,能摧毁就摧毁,不管前边已经摧毁的水晶. 正解: 首先肯定要离散化,然后考虑dp,设 \(dp_{i,j}\) 表示当前处理到了i,摧毁掉的水晶的a最小为j,则转移方程: ...
- zookeeper同一台服务器创建伪集群
下载zk wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7 ...
- SpringBoot中的静态资源访问
一.说在前面的话 我们之间介绍过SpringBoot自动配置的原理,基本上是如下: xxxxAutoConfiguration:帮我们给容器中自动配置组件: xxxxProperties:配置类来封装 ...
- 十五:JDBC学习入门
一.JDBC相关概念介绍 1.1.数据库驱动 这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡 ...
- docker 安装Hive
转自:https://www.cnblogs.com/upupfeng/p/13452385.html#%E9%83%A8%E7%BD%B2hive 使用docker快速搭建hive环境 记录一下 ...
- 微信小程序学习笔记四 自定义组件
1. 自定义组件 类似Vue或react中的自定义组件 小程序允许我们使用自定义组件的方式来构建页面 1.1 创建自定义组件 类似于页面, 一个自定义组件由json wxml wxss js 4个文件 ...
- 如何在 Go 中嵌入 Python
如果你看一下 新的 Datadog Agent,你可能会注意到大部分代码库是用 Go 编写的,尽管我们用来收集指标的检查仍然是用 Python 编写的.这大概是因为 Datadog Agent 是一个 ...
- 原来:HTTP可以复用TCP连接
问题 线上的一个项目会和微信服务器有API请求(目的是获取用户的微信信息),但会有偶发的报错: 'Connection aborted.', ConnectionResetError(104, 'Co ...