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 相关文章推荐
一个简单的自动发送邮件系统(三)
Oct 09 PHP
php字符串截取中文截取2,单字节截取模式
Dec 10 PHP
php入门学习知识点七 PHP函数的基本应用
Jul 14 PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
Apr 10 PHP
PHP解析html类库simple_html_dom的转码bug
May 22 PHP
PHP中使用hidef扩展代替define提高性能
Apr 09 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
PHP实现断点续传乱序合并文件的方法
Sep 06 PHP
PHP队列场景以及实现代码实例详解
Feb 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
php+oracle 分页类
2006/10/09 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
深入理解php的MySQL连接类
2013/06/07 PHP
php定界符
2014/06/19 PHP
php微信公众开发之获取周边酒店信息的方法
2014/12/22 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
js简单实现用户注册信息的校验代码
2013/11/15 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
JavaScript实现简单的tab选项卡切换
2016/01/05 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
详解VueJs中的V-bind指令
2018/05/03 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
Python中处理unchecked未捕获异常实例
2015/01/17 Python
Python可变参数用法实例分析
2017/04/02 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python将list转为matrix的方法
2018/12/12 Python
python tornado使用流生成图片的例子
2019/11/18 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
Django静态文件加载失败解决方案
2020/08/26 Python
你正在寻找的CSS3 动画技术
2011/07/27 HTML / CSS
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
Space NK美国站:英国高端美妆护肤商城
2017/05/22 全球购物
向领导表决心的话
2014/03/11 职场文书
校园安全演讲稿
2014/05/09 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
反四风问题学习心得体会
2016/01/22 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
详解Redis基本命令与使用场景
2021/06/01 Redis