使用PHPExcel导出数据
- 最近要求做增加客流数据等导出为Excel的功能,phpExcel包功能强大,根据实际需求,我只学习了简单的功能。
安装PHPExcel
在composer.json中添加:
"require": {
"phpoffice/phpexcel": "1.8.1"
},
安装完毕,在vendor中出现一个phpoffice包。
使用
$objPHPExcel = new \PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()
->setCellValue("A1", '门店名称')
->setCellValue("B1", '店长')
->setCellValue("A2", '我的门店')
->setCellValue("B2", 'www');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="store.xls"');
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
$objPHPExcel->disconnectWorksheets();
- 增加header头,则会直接下载一个Excel表格到本地,exce列为大写的A,B...,行为数字1,2,3...,不断地拓展。

如果觉得一个个的麻烦可以使用一个php数组导入:
$objPHPExcel = new \PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$dataArray = array(
array('111' => "2016", '222' => "1000", '33aa' => "1000", 200),
array("2010", "Q2", "www", 100),
array("2010", "Q2", "www", 100),
array("2010", "Q2", "www", 100),
array("2010", "Q2", "www", 100),
);
// 或者hash也是可以的,只是插入的Excel的时候,过滤掉key
// $dataArray = array(
// '11'=> array('111' => "2116", '222' => "1000", '33aa' => "1000", 200),
// '22'=> array("2010", "Q2", "www", 100),
// array("2010", "Q2", "www", 100),
// array("2010", "Q2", "www", 100),
// array("2010", "Q2", "www", 100),
// );
$objPHPExcel->getActiveSheet()->fromArray($dataArray, null, 'A1');
$objPHPExcel->getActiveSheet()
->setCellValue("E2", '=SUM(A1:C1)/3');
可以将数组导入,关联数组也可以,只是将值导入,同时可以计算结果导入对应的表格。
单元格计算,例如:setCellValue("E2", '=SUM(A1:C1)/3'),试讲A1,B1,C1相加除以3所得结果放入E2表格。
输出,通过header头,下载Excel文件
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="filename.xls"');
header('Cache-Control: max-age=0');
// If you're serving to IE 9, then the following may be needed
header('Cache-Control: max-age=1');
// If you're serving to IE over SSL, then the following may be needed
header('Expires: Mon, 26 Jul 1997$hourValueGMT'); // Date in the past
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
header('Pragma: public'); // HTTP/1.0
$objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
$objPHPExcel->disconnectWorksheets();

其他的有用的方法:
- 获取行列等
$Column = $objPHPExcel->getActiveSheet()
->getCell('B2')->getColumn();
$Row = $objPHPExcel->getActiveSheet()
->getCell('B2')->getRow();
$Value = $objPHPExcel->getActiveSheet()
->getCell('B2')->getValue();
以上分别可以得到相应的列,行,和表格对应的值,但如果单元格里面放的公式,则返回时公式,而非结果,如上,获取E2则返回结果SUM(A1:C1)/3。
- 合并单元格
$objPHPExcel->getActiveSheet()->mergeCells("A1:A3"); //将A列的1,2,3行合并为一行
- 增加样式
$objPHPExcel->getActiveSheet()->getStyle( 'A1:' . $lineIndex . '1')->getFont()->setBold(true); //加粗
$objPHPExcel->getActiveSheet()->getStyle( 'A1:' . $lineIndex . '1')->getFill()->setFillType(\PHPExcel_Style_Fill::FILL_SOLID); // 背景填充方式
$objPHPExcel->getActiveSheet()->getStyle( 'A1:' . $lineIndex . '1')->getFill()->getStartColor()->setARGB('B0C4DE'); //加颜色
- 数组方式
* <code>
* $objPHPExcel->getActiveSheet()->getStyle('B2')->applyFromArray(
* array(
* 'font' => array(
* 'name' => 'Arial',
* 'bold' => true,
* 'italic' => false,
* 'underline' => PHPExcel_Style_Font::UNDERLINE_DOUBLE,
* 'strike' => false,
* 'color' => array(
* 'rgb' => '808080'
* )
* ),
* 'borders' => array(
* 'bottom' => array(
* 'style' => PHPExcel_Style_Border::BORDER_DASHDOT,
* 'color' => array(
* 'rgb' => '808080'
* )
* ),
* 'top' => array(
* 'style' => PHPExcel_Style_Border::BORDER_DASHDOT,
* 'color' => array(
* 'rgb' => '808080'
* )
* )
* ),
* 'quotePrefix' => true
* )
假如列大于Z,可以通过这个方法转化为对应AA,AB等,从0开始。
private function stringFromColumnIndex($pColumnIndex = 0)
{
static $_indexCache = array();
if (!isset($_indexCache[$pColumnIndex])) {
if ($pColumnIndex < 26) {
$_indexCache[$pColumnIndex] = chr(65 + $pColumnIndex);
} elseif ($pColumnIndex < 702) {
$_indexCache[$pColumnIndex] = chr(64 + ($pColumnIndex / 26)) . chr(65 + $pColumnIndex % 26);
} else {
$_indexCache[$pColumnIndex] = chr(64 + (($pColumnIndex - 26) / 676)) . chr(65 + ((($pColumnIndex - 26) % 676) / 26)) . chr(65 + $pColumnIndex % 26);
}
}
return $_indexCache[$pColumnIndex];
}
foreach ($mergeArray as $singleMergeArray) {
$objPHPExcel->getActiveSheet()->mergeCells("A$singleMergeArray[0]:A$singleMergeArray[1]");
$objPHPExcel->getActiveSheet()->getStyle("A$singleMergeArray[0]:A$singleMergeArray[1]")->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
if (($singleMergeArray[1] - $singleMergeArray[0]) > 2) {
$lastMergeIndex = $singleMergeArray[1] - 2;
$objPHPExcel->getActiveSheet()->mergeCells("D$singleMergeArray[0]:D$lastMergeIndex");
$objPHPExcel->getActiveSheet()->getStyle("D$singleMergeArray[0]:D$lastMergeIndex")->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
}
}
使用PHPExcel导出数据的更多相关文章
- php利用phpexcel导出数据
php中利用phpexcel导出数据的实现代码.对phpexcel类库不熟悉的朋友,可以阅读下<phpexcel中文帮助手册>中的内容,具体实例大家可以phpexcel快速开发指南中的相关 ...
- php 使用PHPExcel 导出数据为Excel
<?php require_once 'PHPExcel/Classes/PHPExcel.php'; /** * 导出数据为Excel * @param array $fieldArr 标题数 ...
- PHPExcel 导出数据(xls或xlsx)- 助手类(函数)
本文链接:https://www.cnblogs.com/tujia/p/11358096.html 说明:简单好用的导出助手,轻松导出数据到 excel !! 使用示例: Example: Exce ...
- Thinkphp解决phpExcel导出数据量大导致内存溢出
工作需要导出几万的数据量.操作比较频繁.之前数据在七八千是数据导出很慢.phpExcel是方便但是性能一般.现在改为使用csv导出数据:可以缓解内存压力,一次导出两三万是没问题的.当然服务器内存给力, ...
- phpexcel导出数据 出现Formula Error的解决方案
phpexcel导出数据报错 Uncaught exception 'Exception' with message 'Sheet1!A1364 -> Formula Error: Unexpe ...
- phpexcel导出数据表格
1.下载phpexcel(李昌辉) 2.在页面引入phpexcel的类文件,并且造该类的对象 include("../chajian/phpexcel/Classes/PHPExcel.ph ...
- thinkphp中使用PHPEXCEL导出数据
thinkphp中导出二维数组到Excel 1.解决时间长度导致EXCEL出现###问题 2.解决长数值型 带来的科学记数法导出问题 订单号不再变为科学记数法 而是直接字符串类型 代码如下: < ...
- PHPExcel导出数据时字段超过26列出错Invalid cell coordinate [1
http://blog.csdn.net/dl425134845/article/details/46650961 以下是解决方案函数 /** * 方法名: getExcel * 作用 ...
- PHP:引用PhpExcel导出数据到excel表格
我使用的是tp3.2框架(下载地址:http://www.thinkphp.cn/topic/38123.html) 1.首先要下载PhpExcel类库,放在如下图目录下 2.调用方法 public ...
随机推荐
- Miller_Rabin codevs 1702 素数判定2
/* 直接费马小定理 */ #include<iostream> #include<cstdio> #include<cstdlib> #include<ct ...
- FineUI初学手册-部分JS整理
有人老找JS,我吧FineUI自己写的JS沾过来方便大家看看,在实现前端的时候更灵活 JS 实例 注释 控件 F.ready F.ready(function(){}); 就是ready 很多方法 ...
- C# DateTime.Now
//2008年4月24日 System.DateTime.Now.ToString("D"); //2008-4-24 System.DateTime.Now.ToString(& ...
- jvm-初探
目录 1,Java体系结构 2.jvm执行引擎 3,ClassLoader的体系结构 4,java class文件 概述 其实,学java不算新手了,但是却感觉很多基本的知识,我们一开始也许是记住而不 ...
- web初识-tomcat的基本使用
Web入门 1. 软件结构: C/S : 有客户端, 维护较麻烦, 需要客户端和服务器端都更新. B/S : 优点 : 客户端就是浏览器, 更新方便, 只需要更新服务器端即可 ...
- php 时间戳 总结 今日,昨日,上周,本周,最近三个月,上季,本季,去年,最近七天,今年,最近三十天
if($time=="今日"){ $beginToday=mktime(0,0,0,date('m'),date('d'),date('Y')); $endToday=mktime ...
- Objective-C中的协议(Protocol)和类别(Category)
1.什么是协议? 2.协议与类别的声明和使用 1.什么是协议? 在Objective-C中,不支持多继承,即不允许一个类有多个父类,但是OC提供了类似的实现方法,也就是协议.协议有点类似于Java里的 ...
- ext等待提示
1.Store加载信息等待 ExtJs的Store在加载时候一般是延迟加载的,这时候Grid就会先出现一片空白,等加载完成后才出现数据:因此,我们需要给它添加一个提示信息! 但是Store却没有wai ...
- Yii2的相关学习记录,初始化Yii2(二)
前面已经将Yii2下载下来了,那我们就需要能实际的使用. 一.初始化,因为我都是在windows系统下,所以用cmd命令打开下载下来的Yii2的根目录.然后运行下面命令: init 会提示选择0为开发 ...
- Win7-IIS7下运行PHP网站(以配置好的drupal网站为例)
0.前提:IIS7已启用. drupal网站配置文件web.config中用到了“简洁链接”(URL重写),所以,还需要事先安装URL重写模块. URL重写模块(url rewrite)下载地址: r ...