php生成与读取excel文件


Posted in PHP onOctober 14, 2016

在网站中经常会生成表格,CSV和Excel都是常用的报表格式,CSV相对来说比较简单,如果大家有疑问我会相继发布一些CSV的实例,这里主要介绍用PHP来生成和读取Excel文件。

要执行下面的函数,首先要引入一个类库:PHPExcel,PHPExcel是一个强大的PHP类库,用来读写不同的文件格式,比如说Excel 2007,PDF格式,HTML格式等等,这个类库是建立在Microsoft's OpenXML和PHP 的基础上的,对Excel提供的强大的支持,比如设置工作薄,字体样式,图片以及边框等等,下面来看看它是如何读写Excel文件的:

首先来看如果生成Excel文件:

下面这代码中函数arrayToExcel的功能是把一个二维数组的数据生成一个excel文件,并且保存在服务器上。

require_once 'Classes/PHPExcel/Reader/Excel2007.php';
require_once 'Classes/PHPExcel/Reader/Excel5.php';
include 'Classes/PHPExcel/IOFactory.php';
function arrayToExcel($data){
$objPHPExcel = new PHPExcel();
$objPHPExcel->setActiveSheetIndex(0);
$objPHPExcel->getActiveSheet()->setTitle('firstsheet');
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');
$objPHPExcel->getDefaultStyle()->getFont()->setSize(10);
//add data
$i = 2;
foreach ($data as $line){
$objPHPExcel->getActiveSheet()->setCellValue('A'.$i, $line['From']);
$objPHPExcel->getActiveSheet()->getCell('A'.$i)->setDataType('n');
$objPHPExcel->getActiveSheet()->setCellValue('B'.$i, $line['To']);
$objPHPExcel->getActiveSheet()->getCell('B'.$i)->setDataType('n');
$i++;
}
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$file = 'excel.xls';
$objWriter->save($file);
}

如果你不希望保存在服务器上,希望生成以后直接下载到客户端,可以在输出文件的时候加入下面的代码,而不使用 $objWriter->save($file);

代码如下:

header("Pragma: public");
header("Expires: 0");
header("Cache-Control:must-revalidate, post-check=0, pre-check=0");
header("Content-Type:application/force-download");
header("Content-Type:application/vnd.ms-execl");
header("Content-Type:application/octet-stream");
header("Content-Type:application/download");
header('Content-Disposition:attachment;filename="excel.xls"');
header("Content-Transfer-Encoding:binary");
$objWriter->save('php://output');

接下来看一个读取Excel文件内容的实例:

下面这代码中函数excelToArray的功能是把一个excel里的内容重新整理放到一个数组了。

代码如下:

require_once 'Classes/PHPExcel.php';
require_once 'Classes/PHPExcel/IOFactory.php';
function excelToArray($file){
$objReader = PHPExcel_IOFactory::createReader('Excel5');
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($file);
$objWorksheet = $objPHPExcel->getActiveSheet();
$highestRow = $objWorksheet->getHighestRow();
$highestColumn = $objWorksheet->getHighestColumn();
$highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
$excelData = array();
for ($row = 2; $row <= $highestRow; ++$row) {
for ($col = 0; $col <= $highestColumnIndex; ++$col) { $excelData[$row][] = $objWorksheet->getCellByColumnAndRow($col, $row)->getValue();
}
}
return $excelData;
}

精简办法

代码如下:

<?php
/**
 *
 * @copyright 2007-2012 Xiaoqiang.
 * @author Xiaoqiang.Wu <jamblues@gmail.com>
 * @version 1.01
 */
error_reporting(E_ALL);
date_default_timezone_set('Asia/ShangHai');
 
/** PHPExcel_IOFactory */
require_once '../Classes/PHPExcel/IOFactory.php'; 
// Check prerequisites
if (!file_exists("31excel5.xls")) {
  exit("not found 31excel5.xls.n");
}
$reader = PHPExcel_IOFactory::createReader('Excel5'); //设置以Excel5格式(Excel97-2003工作簿)
$PHPExcel = $reader->load("31excel5.xls"); // 载入excel文件
$sheet = $PHPExcel->getSheet(0); // 读取第一??工作表
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumm = $sheet->getHighestColumn(); // 取得总列数
 
/** 循环读取每个单元格的数据 */
for ($row = 1; $row <= $highestRow; $row++){//行数是以第1行开始
  for ($column = 'A'; $column <= $highestColumm; $column++) {//列数是以A列开始
    $dataset[] = $sheet->getCell($column.$row)->getValue();
    echo $column.$row.":".$sheet->getCell($column.$row)->getValue()."<br />";
  }
} 
?>

希望本文所述对你有所帮助,php生成与读取excel文件内容就给大家介绍到这里了。希望大家继续关注我们的网站!想要学习php可以继续关注本站。

PHP 相关文章推荐
树型结构列出指定目录里所有文件的PHP类
Oct 09 PHP
php5数字型字符串加解密代码
Apr 24 PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
php实现根据url自动生成缩略图的方法
Sep 23 PHP
php使用指定字符列表生成随机字符串的方法
Apr 18 PHP
php 参数过滤、数据过滤详解
Oct 26 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 PHP
基于PHP实现用户注册登录功能
Oct 14 #PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 #PHP
php车辆违章查询数据示例
Oct 14 #PHP
基于PHPexecl类生成复杂的报表表头示例
Oct 14 #PHP
php+jQuery递归调用POST循环请求示例
Oct 14 #PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 #PHP
PHP中多线程的两个实现方法
Oct 14 #PHP
You might like
thinkPHP模板中for循环与switch语句用法示例
2016/11/30 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
关于this和self的使用说明
2010/08/01 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
JS连连看源码完美注释版(推荐)
2013/12/09 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
2019/02/12 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
[03:02]2014DOTA2西雅图邀请赛 让队员自己告诉你DK NAVI备战情况
2014/07/08 DOTA
python实现的简单窗口倒计时界面实例
2015/05/05 Python
浅谈Python单向链表的实现
2015/12/24 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
python实现屏保计时器的示例代码
2018/08/08 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
python 多进程队列数据处理详解
2019/12/23 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
tensorflow实现残差网络方式(mnist数据集)
2020/05/26 Python
python如何求圆的面积
2020/07/01 Python
python 深度学习中的4种激活函数
2020/09/18 Python
在css3中background-clip属性与background-origin属性的用法介绍
2012/11/13 HTML / CSS
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
台湾最大网路书店:博客来
2018/03/18 全球购物
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
美国运动鞋和服装网上商店:YCMC
2018/09/15 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
工作表现评语
2014/01/19 职场文书
写给女朋友的检讨书
2014/01/28 职场文书
解除劳动合同协议书
2014/04/14 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书