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 清除网页病毒的方法
Dec 05 PHP
PHP5 字符串处理函数大全
Mar 23 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
Sep 10 PHP
PHP文件读写操作相关函数总结
Nov 18 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
Nov 27 PHP
PHP文件操作实例总结
Sep 27 PHP
PHP实现链式操作的三种方法详解
Nov 16 PHP
Laravel中unique和exists验证规则的优化详解
Jan 28 PHP
PHP面向对象之里氏替换原则简单示例
Apr 08 PHP
PHP命名空间namespace及use的简单用法分析
Aug 03 PHP
phpMyAdmin通过密码漏洞留后门文件
Nov 20 PHP
php防止表单重复提交实例讲解
Feb 11 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下获取客户端ip地址的函数
2010/03/15 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
2017/08/11 PHP
一个用js实现控制台控件的代码
2007/09/04 Javascript
自己开发Dojo的建议框架
2008/09/24 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
在jQuery中使用$而避免跟其它库产生冲突的方法
2015/08/13 Javascript
跟我学习javascript的Date对象
2015/11/19 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
JavaScript基础教程——入门必看篇
2016/05/20 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
2019/06/05 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
2019/12/04 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
[02:07]2017国际邀请赛中国区预选赛直邀战队前瞻
2017/06/23 DOTA
Python程序设计入门(5)类的使用简介
2014/06/16 Python
Python匹配中文的正则表达式
2016/05/11 Python
python遍历序列enumerate函数浅析
2017/10/17 Python
基于python plotly交互式图表大全
2019/12/07 Python
python3 xpath和requests应用详解
2020/03/06 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
机关班子查摆问题及整改措施
2014/10/28 职场文书
个人借款协议书范本
2014/11/17 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
法人身份证明书
2015/06/18 职场文书
学习心得体会
2019/06/20 职场文书
分析Java中Map的遍历性能问题
2021/06/26 Java/Android
mysql的单列多值存储实例详解
2022/04/05 MySQL