1:

首先,修改assets/js/wxcms/xxxx.js的Table.api.init({})

增加一行

import_url: 'wxcms/xxxx/import',

顺便说一下批量导出的按钮可以在这个文件的table.bootstrapTable里添加红框区域内容即可

2:

然后再到application/admin/view/wxcms/xxxx/index.html新增红框内容

3:然后到application/admin/controller/wxcms/xxxx.php往控制器里增加一个方法

贴心小棉袄已经为各位大佬贴出下面代代码:

public function import(){return parent::import();}

4、登录管理员账号,就发现界面显示了一个导入按钮

怀着激动的心,颤抖的手,点击导入按钮,哟,弹出文件选择窗口了,竟然就这样可以了?内心默默赞一句

      好家伙,这么方便!

然后按下导出按钮,导出了一份数据,主要是想获取表头,懒得自己再写表头,然后情况所有数据,留下一条测试数据稍作修改打算测测。

然后把这个文件丢进导入,哦豁!!!绿窗弹出操作成功!!!不会吧不会吧 做完了?我还丧心病狂的报了一天工期,10分钟搞好了???

然后默默赞叹自己真棒棒,一边打算看看新数据,

完犊子了,不是说操作成功吗?怎么列表没有新增数据。

5、找问题

吾日三省吾身,我错哪了,我错哪了,我错哪了?

提示绿绿的操作成功,没有报错返回,但凡它warn一下,红一下,我也能有点方向,如今只能先去数据库康康有没有数据,不看不知道,一看吓一跳,好家伙,一半数据进去了,一半没有,也没找到规律

在/library/traits/Backend.php里的protected function import(){}里看了半天,发现下面这里,原来是将表头和数据库字段的备注做匹配,匹配上了就把Excel的值赋值给数据库里的该字段。因为项目开发中有的备注并没有作为前端显示的样式,类似产品分类在数据库的备注是分类id,在前端写的却是分产品分类名称,因此表头是产品分类,与数据库的字段匹配不上,因此录不进该数据。

天!竟然忽视了这个!!!

改,麻溜的改了过来之后。。。。。

注:打码处的代码是为了填一会的坑加的

6:

改完表头之后,妙啊~妙啊~可以了?

眼睛瞪得像铜铃。

害!我就知道没这么顺利,时间戳错的,导入方法加个时间转时间戳方法即可

注意引入:

7:

聪明的小伙伴可能已经发现,打码部分还没清空,还有坑。

是的,小洪眉头一皱发现事情并没有那么简单。

为什么?为什么?实际存入的时间比Excel表录入的时间大正好8小时,为啥是正好8小时,不是13个小时14分,为什么不是5分20秒?难道是因为代码世界没有爱情吗?经过一番百度,原来

获取单元格的类型经过判定后,时间格式类型会成为为Object,这种获取时间的方式会少8个小时。具体解决方法,我用了一个大一就能看懂的方法解决,噗嗤。

噗嗤哈哈哈哈

小棉袄继续贴出参考代码:

try {if (!$PHPExcel = $reader->load($filePath)) {$this->error(__('Unknown data format'));}$currentSheet = $PHPExcel->getSheet(0);  //读取文件中的第一个工作表$allColumn = $currentSheet->getHighestDataColumn(); //取得最大的列号$allRow = $currentSheet->getHighestRow(); //取得一共有多少行$maxColumnNumber = Coordinate::columnIndexFromString($allColumn);$fields = [];for ($currentRow = 1; $currentRow <= 1; $currentRow++) {for ($currentColumn = 1; $currentColumn <= $maxColumnNumber; $currentColumn++) {$val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();$fields[] = $val;}}for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {$values = [];for ($currentColumn = 1; $currentColumn <= $maxColumnNumber; $currentColumn++) {$cell = $currentSheet->getCellByColumnAndRow($currentColumn,$currentRow);$val = $currentSheet->getCellByColumnAndRow($currentColumn, $currentRow)->getValue();if($cell->getDataType()==DataType::TYPE_NUMERIC){  $cellstyleformat = $cell->getStyle($cell->getCoordinate())->getNumberFormat();  $formatcode = $cellstyleformat->getFormatCode(); if (preg_match('/^(\[\$[A-Z]*-[0-9A-F]*\])*[hmsdy]/i', $formatcode)) {  $val =DateChange::excelToTimestamp($val);$num = 8*60*60*1000;$val = $val-$num;}}$values[] = is_null($val) ? '' : $val;}$row = [];$temp = array_combine($fields, $values);foreach ($temp as $k => $v) {if (isset($fieldArr[$k]) && $k !== '') {$row[$fieldArr[$k]] = $v;}}if ($row) {$insert[] = $row;}}} catch (Exception $exception) {$this->error($exception->getMessage());}

8:

测试后,写好数据批量录入操作文档,准备发给客户爸爸,好家伙,发现除了超级管理员,其他用户都不显示这个按钮,去看角色组打算编辑权限,发现并没有批量导入这个选项可以勾选。

经过社区一番百度,目前找到两个比较简单的方法:

一个是创始人回答的

一个是大佬lihoo回答的

我用的是第二个方法,在fa_auth_rule直接加一条rule。然后再到角色组编辑权限即可看到有该权限可以勾选。

但是直接操作数据库,实在是不太好~

要是小伙伴有更简单正常的方法可以告诉小洪~

以上,解决~收工~

fastadmin批量导入的坑——导入失败?日期转换时间戳?日期早了8小时?二三级用户没批量导入权限?相关推荐

  1. 日期转换--接收日期与数据库存储不兼容问题时间段查询

    一.日期转换--接收日期与数据库存储不兼容问题 问题描述: 页面获取的日期,无法查询或者存储到数据库: 页面获取的格式为"yyyy-MM-dd HH:mm:ss",数据库数据类型为 ...

  2. 将字符串形式的日期转换成日期对象

    JS 将字符串转换成日期类型 将字符串形式的日期转换成日期对象 var strTime="2011-04-16"; //字符串日期格式            var date= n ...

  3. JS 将字符串形式的日期转换成日期类型

    1.将字符串形式的日期转换成日期对象 var strTime="2011-04-16"; //字符串日期格式 var date=new Date(Date.parse(strTim ...

  4. js时间戳转换日期,日期转换时间戳

    日期转换时间戳 支持获取当前提供日期之前或之后的n天.n小时.n分钟.n秒钟 /*** 获取时间戳* @param date 日期:2022/02/19 13:49:55* @param num 当前 ...

  5. Oracle SQL实现日期转换时间戳时间戳转化日期

    Oracle SQL实现日期转换时间戳时间戳转化日期 -- 日期转换为毫秒级时间戳  24*60*60 *1000 SELECT (to_date('2019/4/11 14:45:43'       ...

  6. 微信小程序日期转换时间戳

    微信小程序日期转换时间戳   安卓正常,IOS需要转换. 微信小程序内,字符串时间转换为时间戳 如果字符串格式为 "2020-02-02 15:35:08",此时直接 new Da ...

  7. oracle 日期改字符格式_oracle怎么把数值型日期转换成日期字符型

    展开全部 oracle把数值型日期转换bai成日期字符du型的操作方法和详细步骤zhi如下: 1.首先dao,将字符串类型版转换为权数字类型. 此方法使用to_number()直接进行转换. 具体语法 ...

  8. java程序日期转换_Java 日期转换详解及实例代码

    Java 日期转换 涉及的核心类:Date类.SimpleDateFormat类.Calendar类 一. Date型与long型 Date型转换为long型 Date date = new Date ...

  9. php计算日期函数,php日期处理函数(计算时间差,转换时间戳日期)

    php教程 转换时间戳为常用的日期格式与计算时间差:默认返回类型为"分钟" function trans_time($timestamp){ if($timestamp < ...

最新文章

  1. thinkphp6 接收不到数据_单片机红外接收与红外发射
  2. 通过Java反射做实体查询
  3. linux-shell命令之chgrp(change group)【更改群组】
  4. PL/SQL 语言 一
  5. 串口通讯编程一日通2(Overlapped IO模型)
  6. lc 115. Distinct Subsequences
  7. 被迫开源的都是快要死的
  8. grep mysql_详解grep获取MySQL错误日志信息的方法
  9. Windows 平台下Git 服务器搭建
  10. sha1校验工具android,Android 正式版与测试版签名(MD5,SHA1,SHA256)以及忘记keystore的应用正式版签名获取...
  11. 智能制造案例——面向重型机械车间智能制造系统解决方案
  12. 名帖97 赵孟頫 小楷《洛神赋》
  13. Python验证信用卡号的有效性(算法)(称为Luhn检测或者mod 10 检测)
  14. 指针和结构体(初级)
  15. 自由软件之父抛弃OLPC,支持中国的龙梦:教孩子们使用Windows无异于教他们抽烟
  16. 六类水晶头的接线方法(分体式安装图解)
  17. Compose Multiplatform 实战:联机五子棋
  18. 东方国信CirroData分布式数据库与长城超云、广东鸿数完成产品兼容互认证
  19. 揭秘:宜信科技中心如何支持公司史上最大规模全员远程办公|上篇
  20. 像素、灰度、RGB、分辨率

热门文章

  1. 电磁炉主谐振电路研究与功率控制
  2. nVisual综合布线可视化管理系统解决方案
  3. 关于FloTHERM破解后无法打开的问题的解决方法
  4. 自定义UIPageControl圆点背景图片
  5. 全球与中国液体壁纸行业需求趋势及投资策略分析报告2022-2028年
  6. Visual Studio 源码文件UTF-8 带签名 格式保存
  7. 世界主要国家和城市经纬度(2023年3月14日整理)
  8. Android4.2.2 Gallery2源码分析(9)——三个界面的跳转
  9. php 智能输入提示插件,phph 输入邮箱时自动提示邮箱后缀 实现代码
  10. Warframe 大黄脸结合目标位置