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 相关文章推荐
IIS+PHP+MySQL+Zend配置 (视频教程)
Dec 13 PHP
Session服务器配置指南与使用经验的深入解析
Jun 17 PHP
php常用Output和ptions/Info函数集介绍
Jun 19 PHP
使用php实现截取指定长度
Aug 06 PHP
PDO预处理语句PDOStatement对象使用总结
Nov 20 PHP
php单例模式实现方法分析
Mar 14 PHP
PHP实现的方程求解示例分析
Nov 11 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
Aug 05 PHP
Yii框架连表查询操作示例
Sep 06 PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 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
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
优化PHP代码技巧的小结
2013/06/02 PHP
php similar_text()函数的定义和用法
2016/05/12 PHP
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
2006/12/23 Javascript
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
2011/02/23 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
javascript伸缩菜单栏实现代码分享
2015/11/12 Javascript
JavaScript 闭包机制详解及实例代码
2016/10/10 Javascript
Bootstrap常用组件学习(整理)
2017/03/24 Javascript
Zepto实现密码的隐藏/显示
2017/04/07 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
python爬虫添加请求头代码实例
2019/12/28 Python
Python进阶之迭代器与迭代器切片教程
2020/01/29 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
武汉瑞得软件笔试题
2015/10/27 面试题
给国外客户的邀请函
2014/01/30 职场文书
手机被没收检讨书
2014/02/22 职场文书
2014村务公开实施方案
2014/02/25 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers
Vue Mint UI mt-swipe的使用方式
2022/06/05 Vue.js
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers