使用PHPExcel实现Excel文件的导入和导出

2023-11-01

在之前有写过一篇文章讲述了使用 PHP快速生成excel表格文件并下载,这种方式生成Excel文件,生成速度很快,但是有缺点是:
1.单纯的生成Excel文件,生成的文件没有样式,单元格属性(填充色,宽度,高度,边框颜色...)不能自定义;
2.生成的文件虽然可以打开,但是兼容性很差,每次打开,都会报一个警告:

今天使用一个第三方的SDK(PHPExcel)实现Excel文件的导入和导出。

准备工作:
1.下载PHPExcel的SDK,下载地址: https://github.com/PHPOffice/PHPExcel

2.将SDK解压之后的Class文件拷贝到自己的项目。

一.Excel文件读取

function excelToArray(){
	require_once dirname(__FILE__) . '/Lib/Classes/PHPExcel/IOFactory.php';
	
	//加载excel文件
	$filename = dirname(__FILE__).'/result.xlsx';
	$objPHPExcelReader = PHPExcel_IOFactory::load($filename);  

	$sheet = $objPHPExcelReader->getSheet(0); 		// 读取第一个工作表(编号从 0 开始)
	$highestRow = $sheet->getHighestRow(); 			// 取得总行数
	$highestColumn = $sheet->getHighestColumn(); 	// 取得总列数

	$arr = array('A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
	// 一次读取一列
	$res_arr = array();
	for ($row = 2; $row <= $highestRow; $row++) {
		$row_arr = array();
		for ($column = 0; $arr[$column] != 'F'; $column++) {
			$val = $sheet->getCellByColumnAndRow($column, $row)->getValue();
			$row_arr[] = $val;
		}
		
		$res_arr[] = $row_arr;
	}
	
	return $res_arr;
}
或者:
function excelToArray(){
	require_once dirname(__FILE__) . '/Lib/Classes/PHPExcel/IOFactory.php';
	
	//加载excel文件
	$filename = dirname(__FILE__).'/result.xlsx';
	$objPHPExcelReader = PHPExcel_IOFactory::load($filename);  

	$reader = $objPHPExcelReader->getWorksheetIterator();
	//循环读取sheet
	foreach($reader as $sheet) {
		//读取表内容
		$content = $sheet->getRowIterator();
		//逐行处理
		$res_arr = array();
		foreach($content as $key => $items) {
			
			 $rows = $items->getRowIndex();    			//行
			 $columns = $items->getCellIterator();		//列
			 $row_arr = array();
			 //确定从哪一行开始读取
			 if($rows < 2){
				 continue;
			 }
			 //逐列读取
			 foreach($columns as $head => $cell) {
				 //获取cell中数据
				 $data = $cell->getValue();
				 $row_arr[] = $data;
			 }
			 $res_arr[] = $row_arr;
		}
		
	}
	
	return $res_arr;
}
两种方法均可将表格数据转化为数组,然后哦再进行相关的操作就简单了。

二.Excel文件导出
/**
 * 创建(导出)Excel数据表格
 * @param  array   $list 		要导出的数组格式的数据
 * @param  string  $filename 	导出的Excel表格数据表的文件名
 * @param  array   $indexKey 	$list数组中与Excel表格表头$header中每个项目对应的字段的名字(key值)
 * @param  array   $startRow	第一条数据在Excel表格中起始行
 * @param  [bool]  $excel2007   是否生成Excel2007(.xlsx)以上兼容的数据表
 * 比如: $indexKey与$list数组对应关系如下:
 *     $indexKey = array('id','username','sex','age');
 *     $list = array(array('id'=>1,'username'=>'YQJ','sex'=>'男','age'=>24));
 */
function exportExcel($list,$filename,$indexKey,$startRow=1,$excel2007=false){
	//文件引入
	require_once APP_ROOT.'/Api/excel/PHPExcel.php';
	require_once APP_ROOT.'/Api/excel/PHPExcel/Writer/Excel2007.php';
	
	if(empty($filename)) $filename = time();
	if( !is_array($indexKey)) return false;
	
	$header_arr = array('A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
	//初始化PHPExcel()
	$objPHPExcel = new PHPExcel();
	
	//设置保存版本格式
	if($excel2007){
		$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
		$filename = $filename.'.xlsx';
	}else{
		$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);
		$filename = $filename.'.xls';
	}
	
	//接下来就是写数据到表格里面去
	$objActSheet = $objPHPExcel->getActiveSheet();
	//$startRow = 1;
	foreach ($list as $row) {
		foreach ($indexKey as $key => $value){
			//这里是设置单元格的内容
			$objActSheet->setCellValue($header_arr[$key].$startRow,$row[$value]);
		}
		$startRow++;
	}
	
	// 下载这个表格,在浏览器输出
	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='.$filename.'');
	header("Content-Transfer-Encoding:binary");
	$objWriter->save('php://output');
}

导出文件,还可以设置模板

function exportExcel($list,$filename,$indexKey=array()){
	require_once dirname(__FILE__) . '/Lib/Classes/PHPExcel/IOFactory.php';
	require_once dirname(__FILE__) . '/Lib/Classes/PHPExcel.php';
	require_once dirname(__FILE__) . '/Lib/Classes/PHPExcel/Writer/Excel2007.php';
	
	$header_arr = array('A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
	
	//$objPHPExcel = new PHPExcel();						//初始化PHPExcel(),不使用模板
	$template = dirname(__FILE__).'/template.xls';			//使用模板
	$objPHPExcel = PHPExcel_IOFactory::load($template);  	//加载excel文件,设置模板
	
	$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);	//设置保存版本格式
	
	//接下来就是写数据到表格里面去
	$objActSheet = $objPHPExcel->getActiveSheet();
	$objActSheet->setCellValue('A2',  "活动名称:江南极客");
	$objActSheet->setCellValue('C2',  "导出时间:".date('Y-m-d H:i:s'));
	$i = 4;
	foreach ($list as $row) {
		foreach ($indexKey as $key => $value){
			//这里是设置单元格的内容
			$objActSheet->setCellValue($header_arr[$key].$i,$row[$value]);
		}
		$i++;
	}
	
	// 1.保存至本地Excel表格
	//$objWriter->save($filename.'.xls');
	
	// 2.接下来当然是下载这个表格了,在浏览器输出就好了
	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="'.$filename.'.xls"');
	header("Content-Transfer-Encoding:binary");
	$objWriter->save('php://output');
}
先弄一个excel模板


然后使用该模板导出数据


除此之外还可以对表格属性做很多自定义。感兴趣的自己看看吧!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用PHPExcel实现Excel文件的导入和导出 的相关文章

  • 使用 PHP Mcrypt 加密并使用 MySQL aes_decrypt 解密?

    是否可以使用 PHP 加密数据mcrypt并用MySQL在数据库中解密AES DECRYPT 目前 我正在使用RIJNDAEL 128 for mcrypt关于 PHP 我还确保数据库中的加密字段具有数据类型blob Yet AES DEC
  • Symfony2 KnpMenuBundle:设置活动菜单项,即使它不在该菜单上

    我创建了菜单生成器并且它可以工作 我的路线之一是 database 但这有一个子路线 database view id 我不想将视图路线放入菜单项中 因为没有 ID 它就无法工作 但我希望当用户在视图上时数据库路由处于活动状态 我怎样才能做
  • 如何使用 zend paginate 而不加载数据库的所有结果

    所以我认为 zend paginate 工作的方式是 paginator Zend Paginator factory results paginator gt setItemCountPerPage itemCount paginator
  • Jquery .ajax method =“post”但$_POST为空

    ajax method post url save php data id 453 action test beforeSend function complete function success function html mydiv
  • Symfony 不会从集合中删除实体

    我知道一般来说有很多关于这个主题的帖子 不幸的是 这些大多涉及对数据库的实际持久操作 就我而言 我在持久操作之前发生了一个问题 我有一个带有实体 学说 持久性集合的表单 您可以通过 javascript 从 DOM 中删除 对象 提交后 当
  • 生成适用于不同时区和数据的计划

    我正在构建一个网络应用程序 指导人们早起 它会为用户生成七十天内的起床时间表 他们输入当前的上升时间和目标上升时间 然后 上升时间每周减少一定量 直到达到目标时间 用户必须登录网站并在预定时间 签到 考虑到当前登录用户的时区和夏令时 我对如
  • 在react中读取excel文件

    我正在尝试读取 excel 文件并使用 XLSX 将其转换为 JSON 格式 但无法做到这一点 当文件位于本地计算机上时 任何人都可以建议转换方法吗 通过输入选择您本地机器的 Excel 表 在那之后 您的 Excel 数据将显示为 JSO
  • Facebook 页面插件无法运行 - 仅适用于一个网站

    我已将页面插件集成到我的目录中 ruhrlink de info php schluessel 150991 不起作用 其他的可以 当我在开发者网站 gt 页面插件中手动输入网址时 它在那里也不起作用 https www facebook
  • 推进并离开加入

    在教义中我可以 q Doctrine Query create gt from One o gt where t text aaa gt andWhere h text bbb gt leftJoin o Two t gt leftJoin
  • PHP 警告:模块“imagick”已在第 0 行未知加载

    我有一个简单的测试文件 其中唯一的 php 代码是 if isset REQUEST back back back REQUEST back filename images back jpg file file exists filenam
  • PHP 设计模式

    好的 我想首先让您注意到我一直在寻找 php mvc 设计模式 所以我还没有真正找到我想要的东西 现在 在写我的问题时 我找不到我要问的任何相关且具体的问题 但我知道我可能是错的 无论如何考虑这个问题和一个可能有用的问题包 Question
  • PHP 扩展 mysqli 和 nd_mysqli 之间的区别[重复]

    这个问题在这里已经有答案了 Mysqli 准备好的语句 如下所示 在以下情况下会抛出以下错误 get result 叫做 stmt connection gt prepare select column from table where i
  • 如何在 PHP 中访问数组的数组

    我正在研究 Flight api 我正在发送请求 从位置 到位置 从日期等 并且我收到以下数组格式的响应 Array AvailRequest gt Array Trip gt ONE Origin gt BLR Destination g
  • 与 ssh2_connect() 断开连接

    我已经使用 ssh2 连接ssh2 connect到服务器 但我没有看到任何方法在联机帮助页中 http php net ssh2 connect我应该如何结束连接 我不太喜欢在断开连接之前等待脚本结束 我可以用吗fclose 这听起来不对
  • 当用户在单元格中输入触发器时执行子例程

    Excel 中的示例数据 A B C 1 9 5 2 4 y 3 3 1 9 4 66 4 5 5 9 我想做的是当我进入Y在 B 列中 我想要 一些东西 执行 我不认为If Active Cell Y将在这里工作 因为当我进入Y然后按 E
  • 将 vbCrLf 应用于文本框的内容

    我在 Excel vba 项目中有一个用户窗体 在设计时它是空的 在表单初始化事件中 我有以下代码 Private Sub UserForm Initialize txtSQL value SELECT MyName ColY vbCrLf
  • 如何访问混合对象(stdClass)和数组构造中的特定值?

    我的变量如下所示 var dump content object stdClass 5 1 errors gt array 1 0 gt object stdClass 6 2 message gt string 24 Invalid or
  • 在同一台服务器上运行两个 PHP 版本

    我在本地服务器上有两个项目 一个项目运行PHP5 6 另一个项目运行PHP7 0 现在可以根据项目启用这两个版本吗 我已经尝试添加AddHandler application x httpd php7 php在 htaccess 项目之一中
  • 使用Ajax使用php将记录插入mysql数据库

    如何使用 Ajax 对此代码进行编码 请帮助 我是 Bignner 我已经编写了这段代码 它可以工作 但我想与 ajax 一起使用 因为不想重新加载页面 PHP文件 Code For Making Form And getting Data
  • mysql 查询从给定的表结构创建 SEO 友好的 url

    我正在尝试使用下表创建 SEO 友好的 URL 类别表 http sqlfiddle com 2 c474a 4 页表 http sqlfiddle com 2 c474a 5 我正在尝试编写一个 mysql 查询 该查询将使用产生以下输出

随机推荐

  • Blender安装Babylon插件

    参考链接 https doc babylonjs com extensions Exporters Blender 安装步骤图示 首先去这个网站下载此文件 https github com BabylonJS BlenderExporter
  • 区块链安全————区块链技术安全讨论

    0x00 背景介绍 区块链技术是金融科技 Fintech 领域的一项重要技术创新 作为分布式记账 Distributed Ledger Technology DLT 平台的核心技术 区块链被认为在金融 征信 物联网 经济贸易结算 资产管理等
  • 浏览器出现无法访问此页面的提示的解决办法

    部分地区与网络会出现该问题 本人查询论坛后找到的有效解决办法为 控制面板 网络和internet internet选项 连接 局域网设置 在 为LAN使用代理服务器 这一栏打上勾 点击应用退出 刷新一下就可以 下来也有可能是hosts文件里
  • Kotlin高阶函数概念

    一 高阶函数的基本概念 1 传入或者返回函数的函数 传入是函数 返回也是函数 2 函数引用最常见的方式 println 3 带有接收者Receiver的引用pdfPrinter println 二 看一下入门的例子 package net
  • 腾讯员工收入曝光,我顿悟了一个成人世界的残酷事实

    最近 一张腾讯员工的收入证明火了 收入证明上显示 这位员工的职位是腾讯 成都 某游戏客户端开发 已入职9年 而在他的税后年收入那一栏 显示着251多万元 包括工资 奖金和津贴等 平均月收入约20万 算下来 税前大概是450万 这张图在网上流
  • android壁纸显示逻辑

    所有文章仅限自己备忘 并无他用 壁纸主要分为两类 锁屏壁纸和桌面壁纸 一 壁纸服务的启动 壁纸服务WallpaperManagerService中 有一个内部类LifeCycle继承自SystemService SystemServer在启
  • 数据结构——C++中实现栈链(含完整代码)

    栈链相关代码 1 向栈顶插入元素 2 删除栈顶元素 3 判断栈是否为空 4 读取栈顶元素 0 退出程序 栈其实就是一个特殊的线性表 输入输出只能在一端 基于这一特性完成栈链的相关操作 注意事项 由于插入和删除操作只可以在一端 链表头部 所以
  • Atcoder Beginner Contest 044

    C C Tak and Cards 我一开始想的是先从小到大排个序 然后分情况 先从左往右一个数一个数枚举 如果等于ave 1 就res 如果大于ave 1 就说明1个数的没有了 然后从左到右两个数两个数枚举 如果等于ave 2 就res
  • 游戏外挂怎么做?

    文章目录 1 什么是游戏外挂 2 外挂的分类及实现原理 2 1 辅助类外挂 2 2 专用插件类外挂 2 3 通用工具 2 4 内存修改器 2 5 变速器 2 6 按键精灵 2 7 模拟器 2 8 破解版 转载自 Anti Cheat Exp
  • java TRC20

    直接上代码 创建地址 离线 private static SecureRandom random new SecureRandom 具体方法 public static Map
  • 15-数据结构-二叉树的遍历,递归和非递归

    简介 本文主要是代码实现 二叉树遍历 递归和非递归 用栈 主要为了好理解 直接在代码处 加了详细注释 方便复习和后期默写 主要了解其基本思想 为后期熟练应用打基础 遍历的意义 就是为了实现在二叉树上 进行各种操作 给每个结点都光顾到位 到根
  • C语言判断是否到达文件末尾

    血的教训 判断文件是否读到末尾的时候 使用 while fgets 不要用 while feof fgets 不然回车符弄死人
  • Pixhawk之姿态解算篇(2)_mahony算法分析

    一 开篇 还是没能进入到源码部分研究 对姿态解算过程太过于模糊 所以主要开始研究一下关于姿态解算的过程和实现 本篇博文主要是以mahony的算法为基础理解姿态解算的过程 主要参考的论文就是William Premerlani and Pau
  • linux创建文件的方法

    linux创建文件可以通过以下六个方式来完成 gt 标准重定向符允许我们创建一个 0KB 的空文件 touch 如果文件不存在的话 touch 命令将会创建一个 0KB 的空文件 echo 通过一个参数显示文本的某行 printf 用于显示
  • python基础学习--基础

    一 基础知识 1 1 基础语法及编码规范 1 定义变量加if Python 通常是一行写完一条语句 但如果语句很长 我们可以使用反斜杠 来实现多行语句sad total item one item two item three item f
  • 二极管(一):反向恢复时间

    一 反向恢复过程 在图1所示的二极管电路中 加入一个如图2所示的输入电压 即在 0 时间内 输入为 二极管导通 电路中有电流流过 假设二极管的正向压降为 当 远大于 时 可忽略不计 如果在 时刻 输入 突然从 变为 在理想情况下 二极管将即
  • 一文让你彻底了解Linux内核文件系统(大总结)

    一 文件系统特点 文件系统要有严格的组织形式 使得文件能够以块为单位进行存储 文件系统中也要有索引区 用来方便查找一个文件分成的多个块都存放在了什么位置 如果文件系统中有的文件是热点文件 近期经常被读取和写入 文件系统应该有缓存层 文件应该
  • 一百零八、Kettle采集Kafka数据到HDFS(踩坑,亲测有效)

    Kafka到HDFS 除了用Kafka API和flume之外 还可以用kettle 最大优点是不用写代码 版本 Kettle版本 8 2 Hadoop版本 3 1 3 前提 详情请看鄙人的一百零一 Kettle8 2 0连接Hive3 1
  • Python实现支持人机对战的五子棋软件(超详细)

    完整工程下载链接 文章目录 利用pygame实现一个支持双人对战以及人机对战的小游戏 最终效果展示 总体框架介绍 具体功能以及算法思想 一 主界面与棋盘设计 二 移位与胜负判定 三 棋型价值设计 四 人机模式和双人模式的设计 五 游戏状态
  • 使用PHPExcel实现Excel文件的导入和导出

    在之前有写过一篇文章讲述了使用 PHP快速生成excel表格文件并下载 这种方式生成Excel文件 生成速度很快 但是有缺点是 1 单纯的生成Excel文件 生成的文件没有样式 单元格属性 填充色 宽度 高度 边框颜色 不能自定义 2 生成