PHP上传Excel文件导入数据到MySQL数据库示例

时间:2022-09-17 09:32:39

最近在做excel文件导入数据到数据库。网站如果想支持批量插入数据,可以制作一个上传excel文件,导入里面的数据内容到mysql数据库的小程序。

要用到的工具:

thinkphp:轻量级国产php开发框架。可在thinkphp官网下载。

phpexcel:office excel 文档的一个php类库,它基于微软的openxml标准和php语言。可在codeplex官网下载。、

1.设计mysql数据库product

创建product数据库

?
1
create database product default character set utf8 collate utf8_general_ci;

创建pro_info表,表结构

?
1
2
3
4
5
6
create table pro_info(
pid int(4) not null primary key auto_increment,
pname varchar(20) not null,
pprice float not null,
pcount float not null
);

PHP上传Excel文件导入数据到MySQL数据库示例

2.生成项目

先在thinkphp同级目录下新建index.php文件,生成项目home.

?
1
2
3
4
5
6
7
<?php
 
define('app_name', 'home');  //项目名称
define('app_path', './home/'); //项目路径
define('app_debug', true);   //开启debug
require './thinkphp/thinkphp.php'//引入thinkphp核心运行文件
?>

3.上传文件表单

在home/tpl文件夹下新建index文件夹,里面新建index.html文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!doctype html>
 
<html>
  <head>
    <title>上传文件</title>
    <meta charset="utf-8">
  </head>
  <body>
    <form id="upload" action="__url__/upload/" method="post" enctype="multipart/form-data">
      <label for="file">上传文件:</label>
      <input type="file" name="file" id="file"><br />
      <input type="submit" name="submit" value="上传" />
    </form>
  </body>
</html>

4.在/home/lib/action/indexaction.class.php中编写显示上传表单页面、上传excel文件、导入excel文件方法(如果thinkphp/extend下没有扩展包,需要在thinkphp官网下载,然后将扩展包解压放入)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
 
/**
*
* 导入excel文件数据到mysql数据库
*/
class indexaction extends action {
 
  /**
   * 显示上传表单html页面
   */
  public function index() {
    $this->display();
  }
 
  /**
   * 上传excel文件
   */
  public function upload() {
    //引入thinkphp上传文件类
    import('org.net.uploadfile');
    //实例化上传类
    $upload = new uploadfile();
    //设置附件上传文件大小200kib
    $upload->mixsize = 2000000;
    //设置附件上传类型
    $upload->allowexts = array('xls', 'xlsx', 'csv');
    //设置附件上传目录在/home/temp下
    $upload->savepath = './home/temp/';
    //保持上传文件名不变
    $upload->saverule = '';
    //存在同名文件是否是覆盖
    $upload->uploadreplace = true;
    if (!$upload->upload()) {  //如果上传失败,提示错误信息
      $this->error($upload->geterrormsg());
    } else //上传成功
      //获取上传文件信息
      $info = $upload->getuploadfileinfo();
      //获取上传保存文件名
      $filename = $info[0]['savename'];
      //重定向,把$filename文件名传给importexcel()方法
      $this->redirect('index/importexcel', array('filename' => $filename), 1, '上传成功!');
    }
  }
 
  /**
   *
   * 导入excel文件
   */
  public function importexcel() {
    header("content-type:text/html;charset=utf-8");
    //引入phpexcel类
    vendor('phpexcel');
    vendor('phpexcel.iofactory');
    vendor('phpexcel.reader.excel5');
 
    //redirect传来的文件名
    $filename = $_get['filename'];
 
    //文件路径
    $filepath = './home/temp/' . $filename . '.xlsx';
    //实例化phpexcel类
    $phpexcel = new phpexcel();
    //默认用excel2007读取excel,若格式不对,则用之前的版本进行读取
    $phpreader = new phpexcel_reader_excel2007();
    if (!$phpreader->canread($filepath)) {
      $phpreader = new phpexcel_reader_excel5();
      if (!$phpreader->canread($filepath)) {
        echo 'no excel';
        return;
      }
    }
 
    //读取excel文件
    $phpexcel = $phpreader->load($filepath);
    //读取excel文件中的第一个工作表
    $sheet = $phpexcel->getsheet(0);
    //取得最大的列号
    $allcolumn = $sheet->gethighestcolumn();
    //取得最大的行号
    $allrow = $sheet->gethighestrow();
    //从第二行开始插入,第一行是列名
    for ($currentrow = 2; $currentrow <= $allrow; $currentrow++) {
      //获取b列的值
      $name = $phpexcel->getactivesheet()->getcell("b" . $currentrow)->getvalue();
      //获取c列的值
      $price = $phpexcel->getactivesheet()->getcell("c" . $currentrow)->getvalue();
      //获取d列的值
      $count = $phpexcel->getactivesheet()->getcell("d" . $currentrow)->getvalue();
 
      $m = m('info');
      $num = $m->add(array('pname' => $name, 'pprice' => $price, 'pcount' => $count));
    }
    if ($num > 0) {
      echo "添加成功!";
    } else {
      echo "添加失败!";
    }
  }
 
}
?>

5.测试

PHP上传Excel文件导入数据到MySQL数据库示例

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!