zoukankan      html  css  js  c++  java
  • PHP上传多个Excel表格里的数据到数据库然后在页面显示

    //上传excel
    public function uploadExcel()
    {
    //获取当前的请求信息,或者使用助手函数request()
    $request = hinkRequest::instance();
    //引入导入Excel第三方库
    vendor('PHPExcel.Classes.PHPExcel.PHPExcel');
    //实例化PHPExcel类
    $excel = new PHPExcel();
    //获得上传文件的信息,file里面的是input框里的名字
    $files = request()->file('files');
    foreach ($files as $file) {
    //数据为空返回错误
    if (empty($file)) {
    //退出当前循环,继续下一循环
    continue;
    }
    //得到文件原名
    $fileInfo=$file->getInfo();
    $fileOldName=strtolower($fileInfo['name']);

    //移动到框架应用根目录/public/uploads/目录下
    $info = $file->validate(['ext' => 'xlsx,xls'])->move(ROOT_PATH.'public'.DS.'uploads');
    //获取上传到后台的文件名
    $fileName = $info->getSaveName();
    //获取文件路径
    $filePath = ROOT_PATH.'public'.DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.$fileName;
    //获取文件后缀
    $suffix = $info->getExtension();
    //判断哪种类型
    if ($suffix == 'xlsx') {
    $reader = PHPExcel_IOFactory::createReader('Excel2007');
    } else {
    $reader = PHPExcel_IOFactory::createReader('Excel5');
    }
    //表格列名
    $cellName = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ');

    //载入excel文件
    $excel = $reader->load("$filePath", $encode = 'utf-8');
    //读取第一张表
    $sheet = $excel->getSheet(0);
    //获取总行数
    $row_num = $sheet->getHighestRow();
    //获取总列数
    //$col_num = $sheet->getHighestColumn();
    $columnH = $sheet->getHighestColumn(); //取得最大的列号
    $columnCnt = array_search($columnH, $cellName);
    //获取合并单元格信息
    $info=$sheet->getMergeCells();
    $data = []; //数组形式获取表格数据
    for($_row=1; $_row<=$row_num; $_row++){ //读取内容
    for($_column=0; $_column<=$columnCnt; $_column++){
    //根据表格的行和列得到表格的值
    $cellId = $cellName[$_column].$_row;
    $cellValue = $sheet->getCell($cellId)->getValue();

    //富文本转换字符串
    if(is_object($cellValue)){
    $cellValue = $cellValue->__toString();
    }
    $rkey=$_row-1;
    $data[$rkey][$cellName[$_column]] = $cellValue;
    }

    }

    //转化成json字符串
    $str=json_encode($data);
    $arr[]=['tableContent'=>$str,'tableName'=>$fileOldName];
    }
    //批量插入数据
    $res=Db::table('bbs_name')->insertAll($arr);
    }

    //从数据库中得到Excel的数据
    public function getExcel()
    {
    $data = Db::name('name')->select();
    dump(json_encode($data));
    }
  • 相关阅读:
    Merge into使用详解( 同时执行inserts和updates操作 )
    sql执行计划解析案例(二)
    包的定义和导入-----package
    jQuery练习实例(四)
    打印沙漏形
    Java的RandomAccessFile
    农场有头大母牛,每年生头小母牛,小母牛五年后生小母牛,问20年后农场一共有多少头牛?(用面向对象的思想)
    关于编译Lambda时报告返回的为void的错误
    银行对账
    mysql查询随机几条数据(速度快)
  • 原文地址:https://www.cnblogs.com/ymdphp/p/10880165.html
Copyright © 2011-2022 走看看