最新公告
  • 欢迎您光临329687站长资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 织梦CMS二次开发批量导入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文件,这个文件是最重要的,本功能就是通过这个文件来处理的,这几个设置代码如下:

    这些代码全是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开发完整的代码:

    header("Content-type:text/html;charset=utf8");
    require_once('/../dedecms/include/common.inc.php');
    error_reporting(E_ALL);
    set_time_limit(0);
    date_default_timezone_set('Europe/London');
    set_include_path(get_include_path().PATH_SEPARATOR.'../../../Classes/');
    include'PHPExcel/IOFactory.php';
    if(!empty($_GET)){
    $typeid=$_GET['typeid'];
    $dopost=$_GET['do'];
    if($dopost=="exdata"){
    if(!empty($_GET['n'])){
    $inputFileName='./'.$_GET['n'].'.xlsx';
    $objPHPExcel=PHPExcel_IOFactory::load($inputFileName);
    $sheetData=$objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
    $rowarr=array();
    $dsql->Execute('all',"selectbio2,bio1from`dede_addonshop`");
    while($rowall=$dsql->GetArray('all')){
    $rowarr[]=$rowall;
    }
    foreach($sheetDataas$v){
    foreach($rowarras$vt){
    if(in_array($v['B'],$vt)&&$v['A']==$vt['bio1']){
    echo"货号为:".$v['B']."
    厂商为:".$v['A']."的数据已在表中,请在excel文件里面删除这一条后再添加!";
    }
    }
    }
    $row=$dsql->GetOne("selectaid,bio2from`dede_addonshop`orderbyaiddesc");
    if(!empty($row)){
    $aid=$row['aid'];
    $bio2=$row['bio2'];
    }else{
    $aid=0;
    $bio2='';
    }
    if($bio2==$sheetData[count($sheetData)]['B']){
    ShowMsg("不能重复添加内容",'javascript:;');
    exit;
    }
    $arcrow=$dsql->GetOne("selectidfrom`dede_archives`orderbyiddesc");
    if(!empty($arcrow)){
    $arcid=$arcrow['id'];
    }else{
    $arcid=0;
    }
    $tinyrow=$dsql->GetOne("selectidfrom`dede_arctiny`orderbyiddesc");
    if(!empty($tinyrow)){
    $tinyid=$tinyrow['id'];
    }else{
    $tinyid=0;
    }
    $id=max($aid,$arcid,$tinyid);
    $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');
    $fieldnum=count($sheetData[1]);
    $fields=$fieldvalue='';
    for($i=0;$i<$fieldnum;$i++){
    $fields.=$sheetData[1][$alphalpha[$i]].&#039;,&#039;;
    }
    $fields=substr($fields,0,-1);
    foreach($sheetDataas$value){
    $pubdate=GetMkTime(GetDateTimeMk(time()));
    $click=mt_rand(50,200);
    if($value[&#039;A&#039;]==&#039;bio1&#039;|$value[&#039;A&#039;]==&#039;厂商&#039;){
    continue;
    }
    $id=$id+1;
    //获取字段值$value[&#039;A&#039;];
    for($i=0;$i<$fieldnum;$i++){
    $fieldvalue.=",&#039;".$value[$alphalpha[$i]]."&#039;";
    }
    $C=trim($value[&#039;C&#039;]);
    $senddate=time();
    $arcquery="INSERTINTO`dede_archives`(id,typeid,title,mid,channel,pubdate,senddate,click,ismake)VALUES(&#039;$id&#039;,&#039;$typeid&#039;,&#039;$C&#039;,&#039;1&#039;,&#039;6&#039;,&#039;$pubdate&#039;,&#039;$senddate&#039;,&#039;$click&#039;,&#039;-1&#039;);";
    $dsql->ExecuteNoneQuery($arcquery);
    $query="INSERTINTO`dede_addonshop`(aid,typeid,$fields)
    VALUES(&#039;$id&#039;,&#039;$typeid&#039;{$fieldvalue});";
    $dsql->ExecuteNoneQuery($query);
    $fieldvalue=&#039;&#039;;
    $tinyquery="INSERTINTO`dede_arctiny`(id,typeid,channel,mid,senddate)VALUES(&#039;$id&#039;,&#039;$typeid&#039;,&#039;6&#039;,&#039;1&#039;,&#039;$senddate&#039;);";
    $dsql->ExecuteNoneQuery($tinyquery);
    }
    $num=count($sheetData)-2;
    ShowMsg("恭喜,成功插入".$num."条数据!",&#039;javascript:;&#039;);
    }

    329站长网 » 织梦CMS二次开发批量导入excel数据

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    329687站长资源网
    一个专注于各种网站源码、程序模板、技术教程分享的站长资源下载平台
    • 5会员总数(位)
    • 2084资源总数(个)
    • 134本周发布(个)
    • 15 今日发布(个)
    • 210稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情