原生PHP实现Excel文件导出及下载的注意事项与实战案例分享
这次给大家带来关于原生 php 实现 excel 文件读写的步骤详细解释,原生 php 实现 excel 文件存在哪些注意事项呢?下面便是实际的作战案例,一起来看一看吧。

最近在工作里碰到一个需求,此需求是要把数据库里的数据导出到 excel 文件当中,同时还要下载这个 excel 文件。以前没做过,于是就去百度了一下。网上提到大多是用 PHPExcel 类来操作 excel 文件,并且还需要下载这个类才能使用。而我只想使用原生的 php,不想那么麻烦。幸好也有网友说到关于原生 php 生成 excel 文件的方法,其实很简单。下面就把我结合网上资料自己实践的代码分享出来。
一般来说,我们进行导数据的操作,是通过用户在网页页面上点击某个按钮,从而触发相应的 js 方法,接着请求 php 接口来实现的。所以,主要有两种方法可以用来完成这种需求。
在 js 代码里直接使用 window.open()来打开 php 接口的 url,这样就能把 php 生成的 excel 文件下载下来。
php接口代码如下:
$mysqli 连接到本地主机,使用用户名 root,密码 123456,连接到名为 test 的数据库。 从“country”表中选择所有数据,使用的 SQL 语句为“select * from country”。 使用 mysqli_query 函数,传入 $mysqli 和 $sql 作为参数,其结果赋值给 $res 。 设置内容类型为“application/vnd.ms-excel”。 设置 HTTP 头部信息,其中包含内容处置的相关参数,指定要输出的文件名是 country.xls 。 echo "code "; echo "name "; echo "population "; 如果 mysqli_num_rows($res) 的结果大于 0 ,那么 ;如果 mysqli_num_rows($res) 的结果大于等于 1 ,那么 ;倘若 mysqli_num_rows($res) 的结果不为 0 ,那么 ;只要 mysqli_num_rows($res) 的结果是正数,那么 。 2. 只要能成功获取到数据行,就执行后续的代码块。 echo $row['code']." "; echo $row['name']." "; echo $row['population']." "; } }
登录后复制
在 php 接口中,首先将生成的 excel 文件保存在服务器里,接着把文件路径返回给 js,之后 js 利用 window.open()来打开文件路径,从而实现下载。
php接口代码如下:
$mysqli = mysqli_connect('localhost', 'root', '123456', 'test');
$sql = 'select * from country';
$res = mysqli_query($mysqli, $sql);
打开一个名为 './country.xls' 的文件,以写入模式('w')进行操作,并将文件句柄赋值给变量 $file 。
fwrite 这个函数将 "code name population" 写入到文件 $file 中。
");
if(mysqli_num_rows($res) > 0) {
while($row = mysqli_fetch_array($res)) {
fwrite 函数将数据写入文件,其中包含了行数据的编码($row['code'])、名称($row['name'])以及人口数量($row['population']),这些数据以制表符(" ")分隔。
应该把所有文件内容组装到一个字符串里,然后将其一次性写入文件,这样做比较好。
}
}
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(" ", $row);
$title = array();
对于每一个 $row ,其中的元素以 $k 作为键,$v 作为值,进行以下操作:
$title[$k] = str_replace("
", '', $v);
}
//内容读取
$data = array();
$count = 0;
while(!feof($file)) {
$row = fgets($file);
$row = explode(" ", $row);
如果$row[0]的值为假,则继续;这是用于去除最后一行的操作。
对于每一个 $title 中的元素,将其索引赋值给 $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 等第三方类库进行读写操作,这样可以避免许多令人纠结的问题。