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 和 MySQL 基础教程(三)
Oct 09 PHP
web目录下不应该存在多余的程序(安全考虑)
May 09 PHP
PHP5权威编程阅读学习笔记 附电子书下载
Jul 05 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
新手菜鸟必读:session与cookie的区别
Aug 22 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 PHP
php实现zip文件解压操作
Nov 03 PHP
php对文件夹进行相关操作(遍历、计算大小)
Nov 04 PHP
PHP 自动加载类原理与用法实例分析
Apr 14 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编实现程动态图像的创建代码
2008/09/28 PHP
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
2019/10/22 PHP
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
浏览器环境下JavaScript脚本加载与执行探析之defer与async特性
2016/01/14 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
使用Vue制作图片轮播组件思路详解
2018/03/21 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
[05:24]TI9采访——教练
2019/08/24 DOTA
Python中return语句用法实例分析
2015/08/04 Python
Python中__init__.py文件的作用详解
2016/09/18 Python
Numpy掩码式数组详解
2018/04/17 Python
Python之文字转图片方法
2018/05/10 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
Python如何实现后端自定义认证并实现多条件登陆
2020/06/22 Python
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
法国太阳镜店:Sunglasses Shop
2016/08/27 全球购物
精灵市场:Pixie Market
2019/06/18 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
PHP经典面试题
2016/09/03 面试题
英语专业学子个人的自我评价
2013/10/02 职场文书
双方协议书
2014/04/22 职场文书
关键在于落实心得体会
2014/09/03 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL