这篇文章主要介绍了原生php实现excel文件读写的方法,结合实例形式分析了采用原生php针对Excel进行读写操作的相关实现方法与操作注意事项,需要的朋友可以参考下

本文实例分析了原生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文件内容进行读取操作,这主要用于需要将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 '

';

print_r($data);

不过,使用原生php生成的excel文件,存在一个问题,就是每次编辑文件之后保存文件的时候总是会出现如下截图的问题:

也不知道是什么原因,大概是生成的文件本身存在一些问题吧。。。

而且使用原生php对生成的excel文件进行读取的时候会出现中文乱码等一些奇葩情况。所以,使用原生php生成excel文件最好仅在某种情况下使用:只是单纯地将数据从数据库导出到文件中方便查看,无需对文件进行修改,也无需对文件进行读取。这种情况使用原生php来生成excel足以满足需求,免去使用第三方类库来操作excel的麻烦。不过,若是生成之后的文件还有修改保存、读取数据的需求,那还是老老实实使用phpexcel等第三方类库来进行读写操作吧,可以避免很多让人纠结的问题。

您可能感兴趣的文章:

php原生读取excel文件夹,原生php实现excel文件读写的方法分析php技巧相关推荐

  1. python批量读取文件夹中的所有excel文件-python遍历文件夹下所有excel文件

    大数据处理经常要用到一堆表格,然后需要把数据导入一个list中进行各种算法分析,简单讲一下自己的做法: 1.如何读取excel文件 网上的版本很多,在xlrd模块基础上,找到一些源码: import ...

  2. r读取文件夹下的所有csv文件_[R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。...

    解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...

  3. 读取指定文件夹里多个excel表,并将所有excel表数据整合到一个excel中

    1.找出指定文件夹里的所有文件 #-*- encoding: utf-8 -*-# 找出指定文件夹里的所有文件 import osfilePath = 'C:\\Users\\lzk\\Desktop ...

  4. 读取文件夹内文件名至excel

    办公自动化01 ​ 工作中会遇到一些需求,面临这些需求可以使用python进行自动化处理,比如下面的一些需求. 读取文件夹内文件名至excel """ -*- codin ...

  5. python3指定目录所有excel_如何用python遍历文件夹下的所有excel文件

    import xdrlib ,sys import xlrd def open_excel(file="C:/Users/flyminer/Desktop/新建 Microsoft Exce ...

  6. python 读取文件到字典读取顺序_python顺序的读取文件夹下名称有序的文件方法...

    python顺序的读取文件夹下名称有序的文件方法 如下所示: import os path="/home/test/" #待读取的文件夹 path_list=os.listdir( ...

  7. Python批量复制一个文件夹中的全部excel数据并粘贴至一个excel文件中-openpyxl模块

    最近工作经常要把多张相同表头,不同内容的数据汇总到一张excel中,为节省复制粘贴时间,我找到了Python中的openpyxl模块进行处理,读取一个文件夹下所有的excel文件并写入一张excel中 ...

  8. python3指定目录所有excel_Python——合并指定文件夹下的所有excel文件

    前提:该文件夹下所有文件有表头且具有相同的表头. import glob # 同下 from numpy import * #请提前在CMD下安装完毕,pip install numppy impor ...

  9. matlab打开bmp,Matlab 读取文件夹中所有的bmp文件

    将srcimg文件下的bmp文件转为jpg图像,存放在dstimg文件夹下 str = 'srcimg'; dst = 'dstimg'; file=dir([str,'\*.bmp']); :len ...

最新文章

  1. 创建物化视图commit_oracle 中物化视图讲解
  2. STM32 LWIP TCP 数据包分包后合并,超过591字节后分会分包问题
  3. 【采用】【风控系统】风控中心—京东基于Spark的风控系统架构实践和技术细节
  4. mysql5.7.19 创建用户_mysql5.7.19用户的创建和权限的操作
  5. Oracle 把触发器说透
  6. Unity3D 场景与C# Control进行结合
  7. web前端——transform变形 旋转角度正负的判断
  8. 测试结果表明开车打手机比酒后开车更危险
  9. Ubuntu 16.04 orb-slam2配置
  10. docker镜像制作、数据管理
  11. 服务器被挖矿入侵,进程 command为ld-linux-x86-64占用cpu很高
  12. input 输入法禁用
  13. windows任务栏IDEA图标变白色快速解决方法
  14. 华为的倔强和悲壮,Nova9不支持5G却比对手更贵
  15. 基于WPS开放平台 WPS文件转PDF开发指南
  16. Java删除表格的基本代码,Java 删除 Excel 中的空白行和列
  17. 热力夏季运动会 java,描写夏季运动会的作文400字
  18. 1044: 顺序栈基本操作的实现
  19. Kibana快速上手
  20. 写给互联网大厂员工的真心话,醍醐灌顶!

热门文章

  1. ipad怎么连接电脑_一条网线怎么连接多台电脑?
  2. matplotlib坐标设置(笔记二)
  3. Java 中关键字transient引出序列化与反序列化
  4. assets和res/raw的用法
  5. mysql gtid模式主键主突_Mysql基于GTID主从复制
  6. 交换机接口用了那几根线_交换机接口知识大全!网络从业者必懂!
  7. php代码审计是什么意思,php代码审计基础篇
  8. c语言学习-对从键盘输入的一个字符串中的大英字母及数字进行计数
  9. Ansible Tower - 使用入门 2 - 不同团队用户基于 RBAC 执行模板
  10. 联想即将推出预装 Fedora 的 ThinkPad 笔记本电脑