原生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 相关文章推荐
用cookies来跟踪识别用户
Oct 09 PHP
php横向重复区域显示二法
Sep 25 PHP
PHP 在线翻译函数代码
May 07 PHP
PHP 裁剪图片成固定大小代码方法
Sep 09 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
php文章内容分页并生成相应的htm静态页面代码
Jun 07 PHP
php实现猴子选大王问题算法实例
Apr 20 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
Mar 07 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
Mar 30 PHP
laravel5.4生成验证码的实例讲解
Aug 05 PHP
PHP实现正则匹配所有括号中的内容
Jun 22 PHP
php中html_entity_decode实现HTML实体转义
Jun 13 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
推荐文章系统(一)
2006/10/09 PHP
PHP4实际应用经验篇(4)
2006/10/09 PHP
如何在PHP中使用数组
2020/06/09 PHP
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
JScript分割字符串示例代码
2013/09/04 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
jQuery实现动态添加和删除input框实例代码
2019/03/26 jQuery
js Array.slice的8种不同用法示例
2019/07/10 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
实现vuex原理的示例
2020/10/21 Javascript
python编程开发之日期操作实例分析
2015/11/13 Python
python实现生命游戏的示例代码(Game of Life)
2018/01/24 Python
使用python脚本实现查询火车票工具
2018/07/19 Python
python批量下载网站马拉松照片的完整步骤
2018/12/05 Python
Python之虚拟环境virtualenv,pipreqs生成项目依赖第三方包的方法
2019/07/23 Python
Python 脚本的三种执行方式小结
2019/12/21 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
python 等差数列末项计算方式
2020/05/03 Python
工程造价专业大专生求职信
2013/10/06 职场文书
会计岗位描述
2014/02/22 职场文书
中介业务员岗位职责
2014/04/09 职场文书
股东合作协议书范本
2014/04/14 职场文书
党员个人党性分析材料
2014/12/18 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
结婚典礼致辞
2015/07/28 职场文书
MySQL系列之十三 MySQL的复制
2021/07/02 MySQL