原生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(2)――PHP类型
Feb 15 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
May 18 PHP
php中inlcude()性能对比详解
Sep 16 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
php curl 获取https请求的2种方法
Apr 27 PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 PHP
PHP中的Session对象如何使用
Sep 25 PHP
WIFI万能钥匙密码查询接口实例
Sep 28 PHP
PHP常见漏洞攻击分析
Feb 21 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
PHP7.1实现的AES与RSA加密操作示例
Jun 15 PHP
php字符串截取函数mb_substr用法实例分析
Jun 25 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
多重?l件?合查?(一)
2006/10/09 PHP
php4的session功能评述(一)
2006/10/09 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
360搜索引擎自动收录php改写方案
2018/04/28 PHP
PHP7 echo和print语句实例用法
2019/02/15 PHP
新鲜出炉的js tips提示效果
2011/04/03 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
javascript性能优化之DOM交互操作实例分析
2015/12/12 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
用django设置session过期时间的方法解析
2019/08/05 Python
python pillow模块使用方法详解
2019/08/30 Python
python set集合使用方法解析
2019/11/05 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
写自荐信的注意事项
2014/03/09 职场文书
学习计划书怎么写
2014/09/15 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
答辩状格式范本
2015/05/22 职场文书
爱国电影观后感
2015/06/19 职场文书
2015年暑假生活总结
2015/07/13 职场文书
初中团支书竞选稿
2015/11/21 职场文书
Python包argparse模块常用方法
2021/06/04 Python
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技