使用原生php读写excel文件
最近在工作中遇到一个需求,需要将数据库中的数据导出到excel文件中,并下载excel文件。因为以前没做过,所以就百度了一下,网上说的大多是使用PHPExcel类来操作excel文件,这还要去下载这个类才能使用,而我只想使用原生的php,不想那么麻烦,好在也有网友说到关于原生php生成excel文件的方法,其实很简单,下面把我结合网上资料自己实践的代码分享一下。
一般我们这种导数据的操作都是通过用户在网页页面上点击某个按钮触发相应js方法,然后请求php接口来实现的,所以主要有两种方法来完成这种需求。
方法1:直接在js代码中使用window.open()打开php接口的url,即可将php生成的excel文件下载下来。
php接口代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $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接口代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 | $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文件中的数据导入到数据库中的情况。
代码如下:(这里仅展示将文件数据读取到一个数组中)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | $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足以满足需求,免去使用第三方类库来操作excel的麻烦。不过,若是生成之后的文件还有修改保存、读取数据的需求,那还是老老实实使用phpexcel等第三方类库来进行读写操作吧,可以避免很多让人纠结的问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!