原生php实现excel文件读写的方法分析


Posted in PHP onApril 25, 2018

本文实例分析了原生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文件读写的方法分析

如果有需要,还可以使用原生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文件最好仅在某种情况下使用:只是单纯地将数据从数据库导出到文件中方便查看,无需对文件进行修改,也无需对文件进行读取。这种情况使用原生php来生成excel足以满足需求,免去使用第三方类库来操作excel的麻烦。不过,若是生成之后的文件还有修改保存、读取数据的需求,那还是老老实实使用phpexcel等第三方类库来进行读写操作吧,可以避免很多让人纠结的问题。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
《PHP边学边教》(01.开篇――准备工作)
Dec 13 PHP
MySQL相关说明
Jan 15 PHP
php连接mssql的一些相关经验及注意事项
Feb 05 PHP
微信扫描二维码登录网站代码示例
Dec 30 PHP
php银联网页支付实现方法
Mar 04 PHP
php实现模拟登陆方正教务系统抓取课表
May 19 PHP
浅谈php提交form表单
Jul 01 PHP
php实现的简单美国商品税计算函数
Jul 13 PHP
php微信开发之百度天气预报
Nov 18 PHP
thinkPHP5.0框架安装教程
Mar 25 PHP
PHP isset()及empty()用法区别详解
Aug 29 PHP
PHP7 整型处理机制修改
Mar 09 PHP
PHP操作Redis常用技巧总结
Apr 24 #PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 #PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 #PHP
php接口实现拖拽排序功能
Apr 23 #PHP
PHP基于SPL实现的迭代器模式示例
Apr 22 #PHP
PHP生成推广海报的方法分享
Apr 22 #PHP
PHP排序算法之归并排序(Merging Sort)实例详解
Apr 21 #PHP
You might like
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
让Json更懂中文(JSON_UNESCAPED_UNICODE)
2011/10/27 PHP
PHP获取网址的顶级域名函数代码
2012/09/24 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
5秒后跳转效果(setInterval/SetTimeOut)
2013/05/03 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
js阻止默认事件与js阻止事件冒泡示例分享 js阻止冒泡事件
2014/01/27 Javascript
js使用递归解析xml
2014/12/12 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
jquery的 filter()方法使用教程
2018/03/22 jQuery
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
微信小程序仿抖音视频之整屏上下切换功能的实现代码
2020/05/24 Javascript
Python使用爬虫猜密码
2016/02/19 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
如何通过雪花算法用Python实现一个简单的发号器
2019/07/03 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
委托书范本
2014/09/13 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
学校计划生育责任书
2015/05/09 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
教师培训学习心得体会
2016/01/21 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery