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的无限分类实现想法~
Jan 02 PHP
攻克CakePHP系列二 表单数据显示
Oct 22 PHP
php实现的CSS更新类实例
Sep 22 PHP
php找出指定范围内回文数且平方根也是回文数的方法
Mar 23 PHP
php实现爬取和分析知乎用户数据
Jan 26 PHP
Smarty分页实现方法完整实例
May 11 PHP
php结合redis高并发下发帖、发微博的实现方法
Dec 15 PHP
PHP实现的简单异常处理类示例
May 04 PHP
PHP手机短信验证码实现流程详解
May 17 PHP
PHP自定义错误处理的方法分析
Dec 19 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
Oct 22 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
当海贼王变成JOJO风
2020/03/02 日漫
简单易用的计数器(数据库)
2006/10/09 PHP
php多文件上传功能实现原理及代码
2013/04/18 PHP
php实现天干地支计算器示例
2014/03/14 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
定时器(setTimeout/setInterval)调用带参函数失效解决方法
2013/03/26 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
node.js中的forEach()是同步还是异步呢
2015/01/29 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
JS获取字符对应的ASCII码实例
2017/09/10 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
vue用elementui写form表单时,在label里添加空格操作
2020/08/13 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
在Python中定义一个常量的方法
2018/11/10 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
解决Mac下使用python的坑
2019/08/13 Python
python反爬虫方法的优缺点分析
2020/11/25 Python
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
大学旷课检讨书
2014/01/28 职场文书
差生评语大全
2014/05/04 职场文书
禁毒主题班会教案
2015/08/14 职场文书
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers