php简单实现将excel文件的数据批量导入到数据库

陈勇文 发表于 PHP技术 分类,标签:
12

借鉴了一个朋友的思路:http://mxp556.blog.hexun.com/23315689_d.html

简单思路如下:
1、将excel文件另存为txt文件。
2、用fopen()读取文件内容。
3、分析文件内容的结构,构成sql语句。
4、执行sql语句。

ok,下面开始举例。(最重要的是掌握思路!)
假设有一个test.xls的excel文件存储着我们要导入的内容。内容如下:
excel

首先将test.xls文件另存为test.txt文件(注意:要选择制表符分割的那个.txt)
txt
,中间可能会有什么提示,不管它,直接点“确定”或者“是”。然后打开test.txt文件,将它的编码另存为utf-8或者是gb2312,最主要是要跟下面的编码统一,以防出现乱码。

<?php 
header("Content-type:text/html;charset=utf-8"); //强制页面以utf-8编码显示,跟前面test.txt文件的编码要一致。
$conn=@mysql_connect("localhost","root","123456") or die("连接数据失败"); //连接数据库.
@mysql_select_db("test",$conn) or die("打开数据库失败"); //选择数据库,自己创建,还有表也是自己先建好来。
mysql_query("set names utf8");//跟上面的编码要统一,还有要注意的是utf8,不是utf-8。
$file=@fopen("test.txt",'r') or die("打开文件失败"); // 以只读方式打开test.txt文件。
//我们打开test.txt文件,可以看到test.txt文件内容的每一行与test.xls文件的每一行相对应。
//也就是说除了第一行外,每一行就相当于表的一条记录,我们只要循环插入每一行数据到表中就行了。
fgets($file);  //先读取文件的第一行,因为第一行不是我们要的内容。
//下面循环读取每一行,第一行已经读取了,所以从第二行开始读取。
while(!feof($file)){
       $val=fgets($file); 
       //下面一步很关键,用explode()将每一行转换为数组来存储每个字段的值。 
     //比如说第二行的内容是:1	陈勇文	男	电子商务;
       //转换为数组就变成array(1,"陈勇文","男","电子商务");这对于我们插入数据库就很有帮助了。
     $values=explode("\t",trim($val));  //注意用来分割的是制表符"\t",而不是空格" " ,自己也可以输出来测试一下。
     $sql="insert into `test`(`id`,`name`,`sex`,`major`) values('$values[0]','$values[1]','$values[2]','$values[3]')";
       if(!empty($values[0])) mysql_query($sql); //因为最后一行可能是空数据,所以做了个判断。   
}
fclose($file);
?>

搞定,收工。有问题欢迎提出。

//经一个朋友提醒,将excel文件转换为csv格式更好,然后用fetcsv()读取每一行,这样可以直接把每一行转换为数组,不用explode()分割了。

« 上一篇:采集---强大的“小偷” php+mysql+thinkphp学生选课系统:下一篇 »

12 篇评论

发表我的评论

icon_wink.gif icon_neutral.gif icon_mad.gif icon_twisted.gif icon_smile.gif icon_eek.gif icon_sad.gif icon_rolleyes.gif icon_razz.gif icon_redface.gif icon_surprised.gif icon_mrgreen.gif icon_lol.gif icon_idea.gif icon_biggrin.gif icon_evil.gif icon_cry.gif icon_cool.gif icon_arrow.gif icon_confused.gif icon_question.gif icon_exclaim.gif