原生php实现excel文件读写的方法分析
本文实例分析了原生php实现excel文件读写的方法。分享给大家供大家参考,具体如下:
最近在工作中遇到一个需求,需要将数据库中的数据导出到excel文件中,并下载excel文件。因为以前没做过,所以就百度了一下,网上说的大多是使用PHPExcel类来操作excel文件,这还要去下载这个类才能使用,而我只想使用原生的php,不想那么麻烦,好在也有网友说到关于原生php生成excel文件的方法,其实很简单,下面把我结合网上资料自己实践的代码分享一下。
一般我们这种导数据的操作都是通过用户在网页页面上点击某个按钮触发相应js方法,然后请求php接口来实现的,所以主要有两种方法来完成这种需求。
方法1:直接在js代码中使用window.open()
打开php接口的url,即可将php生成的excel文件下载下来。
php接口代码如下:
$mysqli = mysqli_connect('localhost', 'root', '123456', 'test'); $sql = 'select * from country'; $res = mysqli_query($mysqli, $sql); header("Content-type:application/vnd.ms-excel"); header("Content-Disposition:filename=country.xls"); echo "code\t"; echo "name\t"; echo "population\t\n"; if(mysqli_num_rows($res) > 0) { while($row = mysqli_fetch_array($res)) { echo $row['code']."\t"; echo $row['name']."\t"; echo $row['population']."\t\n"; } }
方法2:php接口中先把生成的excel文件保存在服务器中,然后把文件路径返回给js,js再使用window.open()
打开文件路径即可下载。
php接口代码如下:
$mysqli = mysqli_connect('localhost', 'root', '123456', 'test'); $sql = 'select * from country'; $res = mysqli_query($mysqli, $sql); $file = fopen('./country.xls', 'w'); fwrite($file, "code\tname\tpopulation\t\n"); if(mysqli_num_rows($res) > 0) { while($row = mysqli_fetch_array($res)) { fwrite($file, $row['code']."\t".$row['name']."\t".$row['population']."\t\n");//这里写得不好,应该把所有文件内容组装到一个字符串中然后一次性写入文件。 } } fclose($file); echo 'http://www.jtw.com/....../country.xls';//这里返回文件路径给js
两种方法很类似,都能实现将数据库中的数据导出到excel文件中并下载文件,最终文件截图如下:
如果有需要,还可以使用原生php对excel文件内容进行读取操作,这主要用于需要将excel文件中的数据导入到数据库中的情况。
代码如下:(这里仅展示将文件数据读取到一个数组中)
$path = './country.xls'; $file = fopen($path, 'r'); //标题行读取(第一行) $row = fgets($file); $row = explode("\t", $row); $title = array(); foreach($row as $k => $v) { $title[$k] = str_replace("\n", '', $v); } //内容读取 $data = array(); $count = 0; while(!feof($file)) { $row = fgets($file); $row = explode("\t", $row); if(!$row[0]) continue;//去除最后一行 foreach($title as $k => $v) { $data[$count][$title[$k]] = $row[$k]; } $count ++; } fclose($file); echo '<pre>'; print_r($data);
不过,使用原生php生成的excel文件,存在一个问题,就是每次编辑文件之后保存文件的时候总是会出现如下截图的问题:
也不知道是什么原因,大概是生成的文件本身存在一些问题吧。。。
而且使用原生php对生成的excel文件进行读取的时候会出现中文乱码等一些奇葩情况。所以,使用原生php生成excel文件最好仅在某种情况下使用:只是单纯地将数据从数据库导出到文件中方便查看,无需对文件进行修改,也无需对文件进行读取。这种情况使用原生php来生成excel足以满足需求,免去使用第三方类库来操作excel的麻烦。不过,若是生成之后的文件还有修改保存、读取数据的需求,那还是老老实实使用phpexcel等第三方类库来进行读写操作吧,可以避免很多让人纠结的问题。
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php操作office文档技巧总结(包括word,excel,access,ppt)》、《PHP数组(Array)操作技巧大全》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数学运算技巧总结》、《php正则表达式用法总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
- AVFoundation 框架初探究(三)
- AVFoundation 框架初探究(二)
- 关于视图和存储过程的权限问题探究 (r9笔记第87天)
- Java基础-day08-超市购物系统总结
- AVFoundation 框架初探究(一)
- 【Go 语言社区】 HTML5 前端--数据保存实例
- crontab设置导致的服务器进程异常问题 (r10笔记第4天)
- 一条SQL语句的执行计划变化探究(r10笔记第3天)
- tensorflow(一)windows 10 python3.6安装tensorflow1.4与基本概念解读
- 基于AgileEAS.NET SOA 中间件领域模型数据器快速打造自己的代码生成器
- Java基础-day07-代码题-自定义数据类型;ArrayList集合
- 一条报警信息的快速处理和分析(r9笔记第99天)
- 【Go 语言社区】解析Go语言编程中的struct结构
- centos+scala2.11.4+hadoop2.3+spark1.3.1环境搭建
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- linux nc命令小结
- Android如何自定义EditText光标与下划线颜色详解
- 基于Centos7 部署Varnish缓存代理服务器
- Android getActivity()为空的问题解决办法
- Android Notification使用方法总结
- Linux下redis的持久化、主从同步与哨兵详解
- 详解Android(共享元素)转场动画开发实践
- Android自定义View中attrs.xml的实例详解
- Android开发之缓冲dialog对话框创建、使用与封装操作
- Windows 10 下安装 Apache 2.4.41的教程
- Android基础教程数据存储之文件存储
- 关于Android短信验证码的获取的示例
- Linux下制作给ARM开发板使用的文件系统
- Android开发之ProgressBar字体随着进度条的加载而滚动
- Android 动态注册监听网络变化实例详解