原生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 相关文章推荐
给初学者的30条PHP最佳实践(荒野无灯)
Aug 02 PHP
如何用phpmyadmin设置mysql数据库用户的权限
Jan 09 PHP
php实现rc4加密算法代码
Apr 25 PHP
php去除字符串换行符示例分享
Feb 13 PHP
浅谈Eclipse PDT调试PHP程序
Jun 09 PHP
ThinkPHP表单自动提交验证实例教程
Jul 18 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 PHP
PHP常用技巧汇总
Mar 04 PHP
php使用curl代理实现抓取数据的方法
Feb 03 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
php实现和c#一致的DES加密解密实例
Jul 24 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
FCKeditor添加自定义按钮
2008/03/27 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
用javascript实现画板的代码
2007/09/05 Javascript
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
JS实现微信弹出搜索框 多条件查询功能
2016/12/13 Javascript
微信小程序获取用户openId的实现方法
2017/05/23 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
微信小程序实现图片放大预览功能
2020/10/22 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
多版本Python共存的配置方法
2017/05/22 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
Python响应对象text属性乱码解决方案
2020/03/31 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
综合素质的自我鉴定
2013/10/07 职场文书
商场客服专员岗位职责
2014/06/13 职场文书
2014年绩效考核工作总结
2014/12/11 职场文书
用python自动生成日历
2021/04/24 Python
mybatis 获取无数据的字段不显示的问题
2021/07/15 Java/Android
Apache Kafka 分区重分配的实现原理解析
2022/07/15 Servers