原生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 相关文章推荐
投票管理程序
Oct 09 PHP
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
May 26 PHP
php设计模式 Builder(建造者模式)
Jun 26 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
PHP安全的URL字符串base64编码和解码
Jun 19 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
CI框架入门之MVC简单示例
Nov 21 PHP
php基于环形链表解决约瑟夫环问题示例
Nov 07 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
Dec 18 PHP
php把文件设置为插件的技巧方法
Feb 03 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
PHP 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
微信小程序前端promise封装代码实例
2019/08/24 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
python之import机制详解
2014/07/03 Python
python编写Logistic逻辑回归
2020/12/30 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
python版本的仿windows计划任务工具
2018/04/30 Python
python zip()函数的使用示例
2020/09/23 Python
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
装修致歉信
2014/01/15 职场文书
运动会通讯稿100字
2014/01/31 职场文书
小学端午节活动方案
2014/03/13 职场文书
出纳担保书范文
2014/04/02 职场文书
婚前协议书怎么写
2014/04/15 职场文书
幼儿发展评估方案
2014/06/11 职场文书
应聘护士求职信
2014/07/21 职场文书
2014乡镇机关党员个人对照检查材料思想汇报
2014/10/09 职场文书
政审证明范文
2015/06/19 职场文书
mysq启动失败问题及场景分析
2021/07/15 MySQL
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python