PHPExcel将excel表的数据导入数据库

一:话不多说,上干货

    1.首先,需要创建个数据库 product

    数据库代码参考:

/*
Navicat MySQL Data Transfer

Source Server         : TP-jifen-demo
Source Server Version : 50717
Source Host           : localhost:3306
Source Database       : product

Target Server Type    : MYSQL
Target Server Version : 50717
File Encoding         : 65001

Date: 2018-07-20 20:15:34
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `pro_info`
-- ----------------------------
DROP TABLE IF EXISTS `pro_info`;
CREATE TABLE `pro_info` (
  `pId` int(4) NOT NULL AUTO_INCREMENT,
  `pName` varchar(20) NOT NULL,
  `pPrice` float NOT NULL,
  `pCount` float NOT NULL,
  PRIMARY KEY (`pId`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=gb2312;

-- ----------------------------
-- Records of pro_info
-- ----------------------------

    2.整个excel备用,测试必备,大致这样就可以

              

    3.创建项目demo,结构如下(红框重点,Public文件夹下可能还需要个Uploads文件夹用来存放临时文件)

              

config.php:

<?php
return array(
	//'配置项'=>'配置值'
	'DB_TYPE'               =>  'mysql',     // 数据库类型
    'DB_HOST'               =>  'localhost', // 服务器地址
    'DB_NAME'               =>  'product',          // 数据库名
    'DB_USER'               =>  'root',      // 用户名
    'DB_PWD'                =>  '',          // 密码。。
    'DB_PORT'               =>  '3306',        // 端口
    'DB_PREFIX'             =>  'pro_',    // 数据库表前缀
);

IndexController.class.php(有部分注释为本人调试时修改,请轻喷)

<?php

/**
 * @Author: ND01
 * @Date:   2018-07-19 16:13:25
 * @Last Modified by:   ND01
 * @Last Modified time: 2018-07-21 09:16:50
 */
/**
*
* 导入Excel文件数据到MySQL数据库
*/
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
  
  /**
   * 显示上传表单html页面
   */
  public function index() {
    $this->display();
  }
  
  /**
   * 上传Excel文件
   */
  public function upload() {
    //引入ThinkPHP上传文件类
    import('ORG.Net.UploadFile');
    $config = array(
        'exts' => array('xlsx','xls'),
        'maxSize' => 3145728000,
        'rootPath' =>"./Public/",
        'savePath' => 'Uploads/',
        'subName' => array('date','Ymd'),
      );
    //实例化上传类
    $upload = new \Think\Upload($config);
    // dump($upload);die;
    //存在同名文件是否是覆盖
    $upload->uploadReplace = true;
    if (!$info = $upload->upload()) {  //如果上传失败,提示错误信息
      $this->error($upload->getError());
    } else {  //上传成功
      //获取上传文件信息
      // $info = $upload->upload();
      //获取上传保存文件名
      $filename = $info['file']['savename'];
      $savepath = $info['file']['savepath'];
      // dump($filename);die;
      //重定向,把$fileName文件名传给importExcel()方法
      // $this->success('Index/importExcel', array('filename' => $filename), 1, '上传成功!');
    header("content-type:text/html;charset=utf-8");
    //引入PHPExcel类
    // vendor('PHPExcel');
    vendor("PHPExcel.PHPExcel");
    vendor('PHPExcel.IOFactory');
    vendor('PHPExcel.Reader.Excel5');
    // $info= $_GET['info'];dump($info);die;
    //redirect传来的文件名
    // $filename = $_GET['filename'];
    // $filepath = $_GET['filepath'];
    // $info= $_GET['info'];dump($info);die;
    // dump($filename);die;
    
    //文件路径
    $filePath = './Public/' . $savepath. $filename ;
    // dump($savePath);die;
    //实例化PHPExcel类
    // $PHPExcel = new \Think\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;
      }
    }
    // dump($PHPReader);die;
  
    //读取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 = D('Info');
      $num = $m->add(array('pName' => $name, 'pPrice' => $price, 'pCount' => $count));
    }
    if ($num > 0) {
      echo "添加成功!";
    } else {
      echo "添加失败!";
    }
    }
  }
  
  }
?>

index.html

 <!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.测试

二:总结

    文章说明:因学习时浏览网站较多且参考网站较多,如有参考内容转载绝非有意,若有侵犯,还请告知。

    问题总结:学习过程中出现过很多问题。如找不到文件的问题,尝试多处使用dump来查看变量值,保证代码走得通。

    多次出现The filename * is not readable错误,大致分为两种问题,一种是路径问题,一定要多检查、修改、测试,另一种是文件权限问题,可以百度解决(注明一点,我的文件只读也取消不了,百度到的合理解释为:https://baike.1688.com/doc/view-d26261162.html就是说并不影响)。

    注意PHPExcel插件放于Vendor目录下。

    文章若有错误或问题,欢迎指出。

猜你喜欢

转载自blog.csdn.net/qq_42751377/article/details/81141104