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.MVC的模板标签系统(四)
Sep 05 PHP
PHP源码之explode使用说明
Aug 05 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
May 23 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
php中利用explode函数分割字符串到数组
Feb 08 PHP
CI(CodeIgniter)框架配置
Jun 10 PHP
php查询mysql大量数据造成内存不足的解决方法
Mar 04 PHP
PHP实现CSV文件的导入和导出类
Mar 24 PHP
PHP+MySQL实现的简单投票系统实例
Feb 24 PHP
yii2.0整合阿里云oss上传单个文件的示例
Sep 19 PHP
php7函数,声明,返回值等新特性介绍
May 25 PHP
PHP dirname(__FILE__)原理及用法解析
Oct 28 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实现的MySQL数据浏览器
2007/03/11 PHP
色色整理的PHP面试题集锦
2012/03/08 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
PHP 的Opcache加速的使用方法
2017/12/29 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
python常规方法实现数组的全排列
2015/03/17 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
Python hashlib模块实例使用详解
2019/12/24 Python
Pytorch之view及view_as使用详解
2019/12/31 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
SQL Server数据库笔试题和答案
2016/02/04 面试题
远程调用的原理
2014/07/05 面试题
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
医务工作者先进事迹材料
2014/01/26 职场文书
中考标语大全
2014/06/05 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
英文感谢信范文
2015/01/21 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
MySQL 常见存储引擎的优劣
2021/06/02 MySQL