原生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版
Oct 09 PHP
php后台程序与Javascript的两种交互方式
Oct 25 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
Apr 12 PHP
PHP删除非空目录的函数代码小结
Feb 28 PHP
web server使用php生成web页面的三种方法总结
Oct 28 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
PHP Echo字符串的连接格式
Mar 07 PHP
微信支付开发交易通知实例
Jul 12 PHP
PHP实现支付宝即时到账功能
Dec 21 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 PHP
php集成开发环境详解
Sep 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
一个程序下载的管理程序(二)
2006/10/09 PHP
php 三维饼图的实现代码
2008/09/28 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
createElement动态创建HTML对象脚本代码
2008/11/24 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
function foo的原型与prototype属性解惑
2010/11/19 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
原生js获取iframe中dom元素--父子页面相互获取对方dom元素的方法
2016/08/05 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
jquery中用函数来设置css样式
2016/12/22 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
酒店司机岗位职责
2013/12/14 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
教师工作总结范文2014
2014/11/10 职场文书
展览会邀请函
2015/02/02 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
导游词之清晏园
2019/11/22 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
AJAX实现指定部分页面刷新效果
2021/10/16 Javascript
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL