您好,欢迎来到菜鸟吧源码网-本站资源仅供学习与参考,禁止用于商业或违法行为!
  • 首 页
  • 下载APP
  • 公告:菜鸟吧APP于2024.9.15正式上线,请首页右上角进入下载,本站资源均来源于互联网及会员投稿发布,所有资源仅供学习参考研究使用,请勿商用或其它非法用途,商用请购买正版,否则产生一切后果由用户自行承担!谢谢!

     

    当前位置:主页 > 站长学堂 > dede教程 >
    DEDECMS批量导入excel数据到后台文章系统的开发教程
    时间:2020-03-01 11:54 作者:菜鸟哥 浏览:收藏 挑错 打印

    对于一些企业网站或者淘宝客类网站经常会需要将一些excel的数据批量导入到网站,通过批量导入来节省时间而不是从网站后台一条一条的录入加数据。本教程就是以把excel数据导入到织梦系统(dedecms)为例子进行批量数据导入的开发,假设把excel数据导入到织梦主表dede_archives(还有微表和附加表,这里就用主表代表这三个表)里面。
    批量导入excel数据原理:通过查询excel,把数据一条一条的读取出来,然后,通过我们开发的php程序把数据导入到表里面。
    通过上面的原理我们知道,我们可以把批量导入excel数据分为两部分,一部分是开发出从excel读取数据的程序,另一部分是开发出把读取出来的数据插入到数据库表dede_archives里面。
    从excel读取数据程序开发
    其实,这一步有一个老外已经帮我们开发好了,这个老外开发了一套专门读取excel数据表的程序叫PHPExcel类库。
    这个excel类库还包括其它的一些功能,这里不一一介绍,您可以下载来看看,这里只对读取excel进行讲解。
    把读取出来的数据插入到主表dede_archives里面
    当通过PHPExcel类库里面提供的类读取数据后,这一步就是把数据插入到数据库表里面,所以,这一个教程的开发其实就是在开发这一部分 ; 把从excel读取出来的数据插入到主表中的程序开发。
    为了讲解方便,我们把插入数据库表中的数据的文件名叫做excelinert.php ,下面就在这个文件里面进入程序开发,把读取出来的数据插入到数据库表中。


    插入数据开发原理
    1)开发前的准备:
    在excelinsert.php里面加入一个header头的编码,目的是为了统一编码以免出现乱码:header("Content-type:text/html;charset=utf8");
    引入织梦系统的公共文件common.inc.php,为什么要引入这个文件,我们在插入数据库表前,首页要连接网站的数据库,如果不连接将无法插入数据库数据。要注意,引入文件的路径要改成您自己的,因为,我把织梦系统安装在了dedecms里面,所以,路径中有这个目录名称dedecms,如果您安装在根目录的话就去掉这个路径。
    设置错误报告、设置时区、设置程序运行时间,当然,这个运行时间可以不设置、设置PHPExcel类的类库存路径,然后,引入IOFactory.php文件,这个文件是最重要的,本功能就是通过这个文件来处理的,这几个设置代码如下:
    DEDECMS批量导入excel数据到后台文章系统的开发教程
    这些代码全是PHPExcel类里面提供的,所以,这里不用多解释。
    2) 开发插入数据代码:
    为了讲解方式,我们将直接以这种形式来插入数据:https://www.bnxb.com/excelinsert.php?dopost=exdata&typeid=6&n=test1
    表示通过文件excelinert.php插入excel里面的名称为test1的里面的数据,把这些数据插入到织梦数据库表dede_archvies里面,栏目id为6的表中,其中,dopost=exdata表示插入数据口令,因为,作一个判断的话,那什么人也能插入到您的数据库表里面数据了,这是非常可怕的,就像一个网站没有后台一样,这是不是非常可能谁都可以进入网站后台里面,同样的,如果不加这个口令的话,谁都可以插入数据,这是不安全的。
    所以,在插入数据前先通过$GET超级数组获取到typeid、do和n的值,然后,进行对比看看有没有权限进行插入数据库操作,第一个判断应当是判断口令是否正确,如果这个都不正确的话,就不再向下操作了。
    为了讲解方便,下面提供excelinsert.php开发完整的代码:

    001header("Content-type:text/html;charset=utf8");
    002
    003require_once('/../dedecms/include/common.inc.php');
    004
    005error_reporting(E_ALL);
    006
    007set_time_limit(0);
    008
    009date_default_timezone_set('Europe/London');
    010
    011/** Include path **/
    012
    013set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
    014
    015/** PHPExcel_IOFactory */
    016
    017include 'PHPExcel/IOFactory.php';
    018
    019if(!empty($_GET)){
    020
    021$typeid = $_GET['typeid'];
    022
    023$dopost = $_GET['do'];
    024
    025if($dopost == "exdata"){
    026
    027if(!empty($_GET['n'])){
    028
    029$inputFileName = './'.$_GET['n'].'.xlsx';
    030
    031$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
    032
    033$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
    034
    035$rowarr=array();
    036
    037$dsql->Execute('all',"select bio2,bio1 from `dede_addonshop`");
    038
    039while($rowall = $dsql->GetArray('all')) {
    040
    041$rowarr[]=$rowall;
    042
    043}
    044
    045foreach ($sheetData as $v) {
    046
    047foreach ($rowarr as $vt) {
    048
    049if(in_array($v['B'],$vt)&&$v['A']==$vt['bio1']){
    050
    051echo"货号为:".$v['B']."
    052厂商为:".$v['A']."
    053的数据已在表中,请在excel文件里面删除这一条后再添加!";
    054
    055exit;
    056}
    057
    058}
    059}
    060
    061//附加表插入数据前处理
    062
    063$row = $dsql->GetOne("select aid,bio2 from `dede_addonshop` order by aid desc");
    064
    065if(!empty($row)){
    066
    067$aid = $row['aid'];
    068
    069$bio2 = $row['bio2'];
    070
    071}else{
    072
    073$aid = 0;
    074
    075$bio2 = '';
    076
    077}
    078
    079//处理重复问题
    080
    081if($bio2==$sheetData[count($sheetData)]['B']){
    082
    083ShowMsg("不能重复添加内容",'javascript:;');
    084
    085exit;
    086
    087}
    088
    089//主表插入数据前处理
    090
    091$arcrow = $dsql->GetOne("select id from `dede_archives` order by id desc");
    092
    093if(!empty($arcrow)){
    094
    095$arcid = $arcrow['id'];
    096
    097}else{
    098
    099$arcid = 0;
    100
    101}
    102
    103//微表插入数据前处理
    104
    105$tinyrow = $dsql->GetOne("select id from `dede_arctiny` order by id desc");
    106
    107if(!empty($tinyrow)){
    108
    109$tinyid = $tinyrow['id'];
    110
    111}else{
    112
    113$tinyid = 0;
    114
    115}
    116
    117//找出最大的id
    118
    119$id= max($aid,$arcid,$tinyid);
    120
    121$alphalpha = 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');
    122
    123//字段数量
    124
    125$fieldnum = count($sheetData[1]);
    126
    127$fields = $fieldvalue = '';
    128
    129for($i=0; $i < $fieldnum; $i++) {
    130
    131$fields .= $sheetData[1][$alphalpha[$i]]. ',';
    132
    133}
    134
    135$fields = substr($fields, 0,-1);
    136
    137//遍历数组
    138
    139foreach ($sheetData as $value) {
    140
    141$pubdate = GetMkTime(GetDateTimeMk(time()));
    142
    143$click = mt_rand(50, 200);
    144
    145if($value['A']=='bio1'|$value['A']=='厂商'){
    146
    147continue;
    148
    149}
    150
    151$id= $id+1;
    152
    153//获取字段值$value['A'];
    154
    155for($i=0; $i < $fieldnum; $i++) {
    156
    157$fieldvalue .= " ,'".$value[$alphalpha[$i]]."' ";
    158
    159}
    160
    161//标题
    162
    163$C = trim($value['C']);
    164
    165//保存到主表
    166
    167$senddate = time();
    168
    169$arcquery = "INSERT INTO `dede_archives`(id,typeid,title,mid,channel,pubdate,senddate,click,ismake)VALUES ('$id','$typeid','$C','1','6','$pubdate','$senddate','$click','-1');";
    170
    171$dsql->ExecuteNoneQuery($arcquery);
    172
    173//保存到附近加表
    174
    175$query = "INSERT INTO `dede_addonshop`(aid,typeid,$fields)
    176
    177VALUES ('$id','$typeid'{$fieldvalue});";
    178
    179$dsql->ExecuteNoneQuery($query);
    180
    181$fieldvalue = '';
    182
    183//保存到微表
    184
    185$tinyquery = "INSERT INTO `dede_arctiny`(id,typeid,channel,mid,senddate)VALUES ('$id','$typeid','6','1','$senddate');";
    186
    187$dsql->ExecuteNoneQuery($tinyquery);
    188
    189}
    190
    191$num = count($sheetData)-2;
    192
    193ShowMsg("恭喜,成功插入   ".$num."   条数据!",'javascript:;');
    194
    195}

    郑重声明:
    本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
    我们不承担任何技术及版权问题,且不对任何资源负法律责任。
    如无法下载,联系站长索要。
    如有侵犯您的版权,请给我们来信:cainiaovip8@qq.com,我们尽快处理。

    织梦中TAG标签字数长度限制解决方法织梦中TAG标签字数长度限制解决方法
    织梦后台突然打不开或打开后空白的解决方法织梦后台突然打不开或打开后空白的解决
    织梦系统解决后台“DEDECMS安全提示”的方法织梦系统解决后台“DEDECMS安全提示”