原生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 相关文章推荐
PHP4实际应用经验篇(1)
Oct 09 PHP
php 保留字列表
Oct 04 PHP
php实现MD5加密16位(不要默认的32位)
Aug 12 PHP
PHP内核探索:变量概述
Jan 30 PHP
ThinkPHP分页类使用详解
Mar 05 PHP
windwos下使用php连接oracle数据库的过程分享
May 26 PHP
跨浏览器PHP下载文件名中的中文乱码问题解决方法
Mar 05 PHP
Codeigniter发送邮件的方法
Mar 19 PHP
php metaphone()函数及php localeconv() 函数实例解析
May 15 PHP
CI框架表单验证实例详解
Nov 21 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
在laravel中实现事务回滚的方法
Oct 10 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函数重载的替代方法--伪重载详解
2015/05/08 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
JS 用6N±1法求素数 实例教程
2009/10/20 Javascript
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
JS跨域总结
2012/08/30 Javascript
JQuery调webservice实现邮箱验证(检测是否可用)
2013/05/21 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
js清理Word格式示例代码
2014/02/13 Javascript
基于jquery实现等比缩放图片
2014/12/03 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
windows下安装nodejs及框架express
2015/08/07 NodeJs
浅谈javascript 函数表达式和函数声明的区别
2016/01/05 Javascript
原生JS查找元素的方法(推荐)
2016/11/22 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
python操作gmail实例
2015/01/14 Python
Python查询IP地址归属完整代码
2017/06/21 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
python and or用法详解
2019/06/26 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
Python基于pygame实现单机版五子棋对战
2019/12/26 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
.net C#面试题
2012/08/28 面试题
个人年终总结怎么写
2015/03/09 职场文书
2015年结对帮扶工作总结
2015/05/04 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
MySQL创建索引需要了解的
2021/04/08 MySQL