ThinkPHP 框架实现的读取excel导入数据库操作示例


Posted in PHP onApril 14, 2020

本文实例讲述了ThinkPHP 框架实现的读取excel导入数据库操作。分享给大家供大家参考,具体如下:

入口文件中:

require_once VENDOR_PATH.'PHPExcel/PHPExcel/IOFactory.php';
require_once VENDOR_PATH.'PHPExcel/PHPExcel.php';

PHP:

namespace Home\Controller;
class ExcelController extends CommonController
{
public function Import() {
// vendor('PHPExcel.PHPExcel.IOFactory');
vendor("PHPExcel.PHPExcel.PHPExcel");
vendor("PHPExcel.PHPExcel.Writer.Excel5");
vendor("PHPExcel.PHPExcel.Writer.Excel2007");
//$excel = new PHPExcel();
$fileName = './trans_rate.xlsx';
date_default_timezone_set('PRC');
// 读取excel文件
try {
$objPHPExcel = \PHPExcel_IOFactory::load($fileName);
$inputFileType = \PHPExcel_IOFactory::identify($fileName);
$objReader = \PHPExcel_IOFactory::createReader($inputFileType);
// $objPHPExcel = $objReader->load($fileName);
// 确定要读取的sheet $sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
// 获取一行的数据
// $phone_str = '';
for ($row = 3; $row <= $highestRow; $row++) {
 $row_data = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
//获取excel表中一行的数组数据
//dump($row_data);
$row_data = $row_data[0];
$time = date('Y-m-d H:i:s', strtotime(trim($row_data[0])));
$start_province = trim($row_data[1]);
$start_city = trim($row_data[2]);
...
// $phone_str .= '"' . $phone . '",';
$where['phone'] = $phone;
$id_arr = M(数据表名)->where($where)->getField('id');
$user_id = !empty($id_arr) ? $id_arr : 0;
$fields[] = [
'数据表字段' => $user_id,//用户id
          ...
           ];
}
// dump($fields);
$rate_add = M(数据表名)->addAll($fields);
dump($rate_add);
echo M()->getLastSql();
if (!(0 < $rate_add)) {
CommonController::logProfile('添加excel数据,SQL:' . M()->getLastSql()); $this->endBack(0); }
// echo $phone_str . '<br />';
// dump($user_id);
} catch (Exception $e) {
die('加载文件发生错误:"' . pathinfo($fileName, PATHINFO_BASENAME) . '": ' . $e->getMessage()); } }}

php读取excel表数据:

<?php
include 'ThinkPHP/Library/Vendor/PHPExcel/PHPExcel/IOFactory.php';

$inputFileName = './trans_rate.xlsx';
date_default_timezone_set('PRC');
// 读取excel文件
try {
  $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
  $objReader = PHPExcel_IOFactory::createReader($inputFileType);
  $objPHPExcel = $objReader->load($inputFileName);
} catch(Exception $e) {
  die('加载文件发生错误:"'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
}

// 确定要读取的sheet
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();

// 获取一行的数据
for ($row = 1; $row <= $highestRow; $row++){
// Read a row of data into an array
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
//这里得到的rowData都是一行的数据,得到数据后自行处理
var_dump($rowData);
echo "<br>";
}
//$data为从excel中获取到的数组
for ($i =0; $i<count($data);$i++){
  echo '<br>';
  $gettime= explode('-',$data[$i][0]);
  if (checkdate($month=$gettime[0],$day=$gettime[1],$year=$gettime[2])){
    echo gmdate('Y-m-d',gmmktime(0,0,0,$month,$day,$year));
  }else{
    echo ($data[$i][0]);
  }
  echo '-----------';
  echo $data[$i][1];
}
<?php
include 'ThinkPHP/Library/Vendor/PHPExcel/PHPExcel/IOFactory.php';

$inputFileName = './test.xlsx';
date_default_timezone_set('Asia/Shanghai');
// 读取excel文件
try {
  $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
  $objReader = PHPExcel_IOFactory::createReader($inputFileType);
  $objPHPExcel = $objReader->load($inputFileName);

  // 确定要读取的sheet,什么是sheet,看excel的右下角,真的不懂去百度吧
  $sheet = $objPHPExcel->getSheet(0);
  $highestRow = $sheet->getHighestRow();//最大行
  $highestColumn = $sheet->getHighestColumn();//最大列

  $data = array();
  for($rowIndex=2;$rowIndex<=$highestRow;$rowIndex++){    //循环读取每个单元格的内容。注意行从1开始,列从A开始
    for($colIndex='A';$colIndex<=$highestColumn;$colIndex++){
      $addr = $colIndex.$rowIndex;
      if($colIndex==="A"){ //指定H列为时间所在列
        $cell = gmdate("Y-m-d H:i:s", PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell($addr)->getValue()));
//        $cell = PHPExcel_Shared_Date::ExcelToPHP($sheet->getCell($addr)->getValue());
//        var_dump($cell);die;
      }else{
        $cell = $sheet->getCell($addr)->getValue();
      }
//      if($cell instanceof PHPExcel_RichText){ //富文本转换字符串
//        $cell = $cell->__toString();
//      }
      $data[$rowIndex][$colIndex] = $cell;
    }
  }
//  return $data;
  var_dump($data);
} catch(Exception $e) {
  die('加载文件发生错误:"'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
}

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP实现用户认证及管理完全源码
Mar 11 PHP
php中关于普通表单多文件上传的处理方法
Mar 25 PHP
php将fileterms函数返回的结果变成可读的形式
Apr 21 PHP
PHP设计模式 注册表模式(多个类的注册)
Feb 05 PHP
PHP输出时间差函数代码
Jan 28 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
php缩放gif和png图透明背景变成黑色的解决方法
Oct 14 PHP
在Windows XP下安装Apache+MySQL+PHP环境
Feb 22 PHP
PHP模板引擎Smarty中的保留变量用法分析
Apr 11 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
PHP面向对象程序设计方法实例详解
Dec 24 PHP
php无限级评论嵌套实现代码
Apr 18 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
Apr 13 #PHP
PHP 对象接口简单实现方法示例
Apr 13 #PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 #PHP
yii2.0框架多模型操作示例【添加/修改/删除】
Apr 13 #PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
Apr 13 #PHP
php回调函数处理数组操作示例
Apr 13 #PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 #PHP
You might like
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
php绘图之在图片上写中文和英文的方法
2015/01/24 PHP
PHP抓取网页、解析HTML常用的方法总结
2015/07/01 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
2016/10/14 PHP
Laravel框架实现利用监听器进行sql语句记录功能
2018/06/06 PHP
php常用日期时间函数实例小结
2019/07/04 PHP
JavaScript 内置对象属性及方法集合
2010/07/04 Javascript
javascript 常见功能汇总
2015/06/11 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
2017/01/04 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
OpenLayers3实现对地图的基本操作
2020/09/28 Javascript
python 2.7.14安装图文教程
2018/04/08 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
Django框架的使用教程路由请求响应的方法
2018/07/03 Python
Python import与from import使用及区别介绍
2018/09/06 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
Python图片的横坐标汉字实例
2019/12/04 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
软件测试工程师笔试题带答案
2015/03/27 面试题
计算机应用专业自荐信
2014/07/05 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
Spring Boot 实现敏感词及特殊字符过滤处理
2021/06/29 Java/Android