批量导入excel数据到织梦网站教程_织梦CMS教程


有时候我们需要把一些excel的数据批量导入到织梦网站里面,例如,一些查询数据的网站里面的数据是一次性导入的,这样用户可以查询使用,而不是从网站后台一条一条的加数据。

 

本教程将以把excel数据导入到织梦系统(dedecms)为例子进行批量数据导入的开发,假设把excel数据导入到织梦主表dede_archives(还有微表和附加表,这里就用主表代表这三个表)里面。

批量导入excel数据原理:通过查询excel,把数据一条一条的读取出来,然后,通过我们开发的php程序把数据导入到表里面。

  通过上面的原理我们知道,我们可以把批量导入excel数据分为两部分,一部分是开发出从excel读取数据的程序,另一部分是开发出把读取出来的数据插入到数据库表dede_archives里面。

excel读取数据程序开发

  其实,这一步有一个老外已经帮我们开发好了,这个老外开发了一套专门读取excel数据表的程序叫PHPExcel类库。

  下载地址:https://github.com/PHPOffice/PHPExcel

  这个人开发的读取excel类库还包括其它的一些功能,这里不一一介绍,您可以下载来看看,这里只对读取excel进入讲解。

  现在我们已经把*部分开发好了(其实,是借助人家开发的php类)。

把读取出来的数据插入到主表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类文件

  这些代码全是PHPExcel类里面提供的,所以,这里不用多解释。

 

 2) 开发插入数据代码:

  为了讲解方式,我们将直接以这种形式来插入数据:http:///excelinsert.php?dopost=exdata&typeid=6&n=test1

  表示通过文件excelinert.php插入excel里面的名称为test1的里面的数据,把这些数据插入到织梦数据库表dede_archvies里面,栏目id6的表中,其中,dopost=exdata表示插入数据口令,因为,作一个判断的话,那什么人也能插入到您的数据库表里面数据了,这是非常可怕的,就像一个网站没有后台一样,这是不是非常可能谁都可以进入网站后台里面,同样的,如果不加这个口令的话,谁都可以插入数据,这是不安全的。

  所以,在插入数据前先通过$GET超级数组获取到typeiddon的值,然后,进行对比看看有没有权限进行插入数据库操作,*个判断应当是判断口令是否正确,如果这个都不正确的话,就不再向下操作了。

  为了讲解方便,下面提供excelinsert.php开发的完全的代码:

<?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');
/** Include path **/
set_include_path(get_include_path() . PATH_SEPARATOR . '../../../Classes/');
/** PHPExcel_IOFactory */
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',"select bio2,bio1 from `dede_addonshop`");
                     while ($rowall = $dsql->GetArray('all')) {
                                $rowarr[]=$rowall;
                     }
        
foreach ($sheetData as $v) {
         foreach ($rowarr as $vt) {
                   if(in_array($v['B'],$vt)&&$v['A']==$vt['bio1']){
                            echo "货号为:".$v['B']."<br>厂商为:".$v['A']."<br>的数据已在表中,请在excel文件里面删除这一条后再添加!";
                            exit;
                   }
         }
        
}
                                     //附加表插入数据前处理
                     $row = $dsql->GetOne("select aid,bio2 from `dede_addonshop` order by aid desc");
                     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("select id from `dede_archives` order by id desc");
                     if(!empty($arcrow)){
                              $arcid = $arcrow['id'];
                     }else{
                              $arcid = 0;
                     }
                  //微表插入数据前处理
                     $tinyrow = $dsql->GetOne("select id from `dede_arctiny` order by id desc");
                     if(!empty($tinyrow)){
                              $tinyid = $tinyrow['id'];
                     }else{
                              $tinyid = 0;
                     }
               
                //找出*大的id
               $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]]. ',';
                      }
               $fields = substr($fields, 0,-1);
                   //遍历数组
                         foreach ($sheetData as $value) {
                   $pubdate = GetMkTime(GetDateTimeMk(time()));
                   $click = mt_rand(50, 200);
                                   if($value['A']=='bio1'|$value['A']=='厂商'){
                                                   continue;
                                          }
                                          
                                         $id = $id+1;
                                          //获取字段值$value['A'];
                                                   for ($i=0; $i < $fieldnum; $i++) {
                                                              $fieldvalue .= " ,'".$value[$alphalpha[$i]]."' ";
                                                    }
                                                //标题
                     $C = trim($value['C']);
                                               //保存到主表
                     $senddate = time();
                                                $arcquery = "INSERT INTO `dede_archives`(id,typeid,title,mid,channel,pubdate,senddate,click,ismake)VALUES ('$id','$typeid','$C','1','6','$pubdate','$senddate','$click','-1');";
                                      $dsql->ExecuteNoneQuery($arcquery);
                               
                                    //保存到附近加表
                                         $query = "INSERT INTO `dede_addonshop`(aid,typeid,$fields)
                                         VALUES ('$id','$typeid'{$fieldvalue});";
                                    $dsql->ExecuteNoneQuery($query);
                    $fieldvalue = '';
                                    //保存到微表
                                    $tinyquery = "INSERT INTO `dede_arctiny`(id,typeid,channel,mid,senddate)VALUES ('$id','$typeid','6','1','$senddate');";
                                    $dsql->ExecuteNoneQuery($tinyquery);
                     
                            }
        $num = count($sheetData)-2;
        ShowMsg("恭喜,成功插入   ".$num."   条数据!",'javascript:;');
           }
         }
}else{
         echo "密码或文件名错误!您无权做任何操作!";
} 
?>

 

  以上就是完整的把excel里面数据插入到数据库主表dede_archives里面的代码,是经过实际测试的完全没有问题,如果你做出来不行的话,可能是您引入的common.inc.php路径和引入的PHPExcel类库Classess类有问题,若有问题请检查这两个地方。

代码分析

 

1)*步先判断问号后面是不是为空,即dopost=exdata&typeid=6&n=test1字符串是否为空,如果这个字符串都是空的话,其它,就不用操作了,直接通过出程序,显示:echo "密码或文件名错误!您无权做任何操作!";

  只有当if(!empty($_GET))条件成立时,才有可能进入插入操作。

  然后,获取typeiddo的值:

    $typeid = $_GET['typeid'];

    $dopost = $_GET['do'];

  因为下面要对要插入到数据库表中数据时还要进行口令的判断,所以,这里获取do的值是必须的,但是,这里为什么一起要获取栏目id的值呢?因为,这里基本上要到*后一步才使用,为什么不等到使用时再获取呢?如果密码不对或其它原因的话,不能进行插入操作,那不是白白获取了$typeid的值,从代码优化的角度,这样不是*优的,但是,大家请注意,因为,下面要对获取到的$GET的数组进行操作,所以,为了保险起见,这时大这个地方先获取到栏目id的值,这样可以保证不会在后面出错,当然,如果您在开发时,能保证不会出错可以在使用$typeid时再获取也可以。

  然后,判断口令是否正确,即if($dopost=="exdata")是否为真,若为真说明我们在浏览器地址栏输入的口令就是正确的,否则,就是错误的,如果出错出退出程序不做任何操作。

  如果正确,则获取n的值,文件excel的文件名$inputFileName

  然后,通过PHPExcel类获取到excel文件里面的数据保存到数组$sheetData里面。

 

2)判断要插入的数据是否已经存在于表dede_addonshop里面。

  查询附加表dede_addonshop里面的字段bio2,bio1,并把查询出来的一维数组放到二维数组$rowall里面。

  因为,把一条数据插入到织梦系统里面后,其实,是在织梦的主表、附加表和微表进入了插入操作,所以,在插入前都要先判断一下插入的数据是不是在这三个表中都已经存在了,如果已经存在了就不要进入插入操作了。

 

3)插入数据库表时*大数据id的判断

  当向主表或附加表或微表加插入数据库前,还要判断一下这时主表或附加表或微表里面*大的id,把这个id查询出来,进入对比即:$id = max($aid,$arcid,$tinyid);

  这样对比以后获取到的$id的值就是*大的,获取这个*大的$id后,就可以在这个$id的基本上增加$id,例如,当前表中*大的id9,那么,下面我们在插入数据时对应的id值就是从10开始,这是非常重要的,如果不做这个判断,那么,就会把原来的数据给覆盖掉。

 

 4)遍历数组$sheetData插入数据

  因为,通过PHPExcel获取到的数据是保存在$sheetData二维数据里面,类似array(array('a','b'),array('b','c')),所以,在遍历这个数组,然后,把这个数组里面的数据插入到织梦的主表、微表和附加表里面。

  这里要注意$id = $id+1,这行代码为什么要做这行代码,是因为,如果没有这行代码那么,在插入数据时id的值一直是同一个,例如,$id=9,这样一直是9,这是不可能的,因为,一个网站面的每一篇文章的id都是不同的,如果全一样的话,可能网站里面显示数据就只有一条了,其它的全部被覆盖掉了。



# seo监控免费  # 时再  # 自己的  # 湖州营销推广平台*地址  # 益阳项目推广公司网站  # 周口校园网站建设  # 宜昌网站建设贴吧*新  # 进口网站建设管理模式  # 咸宁网站建设厂商排名  # 网站建设深圳给源码  # 地方网站软文推广  # 网站推广服务外包方案  # 是否正确  # 北辰区营销推广策划招聘  # 关键词排名哪家厉害  # cute seo博主视频  # 推广营销专业面试题  # 体贴的聊城网站建设  # 网站推广效果评估书  # 明光网站推广优化  # 做seo工作怎么*  # 黑河网站优化报价  # 衡水seo优化哪家好  # 都是  # 织梦CMS教程  # 导入excel  # excel数据  # 织梦excel  # 宋体  # 这是  # 这一  # 类库  # 遍历  # 作了  # 批量导入excel数据到织梦网站教程  # 导入到  # 好了  # 程序开发  # 这行  # 是从  # 要注意  # 不做  # 要对  # 您无权  # 为空 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化91478 】 【 技术知识72672 】 【 云计算0 】 【 GEO优化84317 】 【 优选文章0 】 【 营销推广36048 】 【 网络运营41350 】 【 案例网站102563 】 【 AI智能45237


相关推荐: 建站之星配置系统详解与新手快速建站指南  如何快速生成ASP一键建站模板并优化安全性?  如何快速搭建高效香港服务器网站?  建站之星模板快速切换与风格调整操作指南  织梦dedecms自定义表单添加地区联动显示数字解决方法_织梦CMS教程  建站之星授权查询步骤有哪些?如何验证?  织梦dedecms软件模型增加图集功能教程_织梦CMS教程  如何在阿里云完成域名注册与建站?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  实惠建站价格推荐:2025年高性价比自助建站套餐解析  dedecms织梦自带采集插件详细图文教程_织梦CMS教程  已有域名如何免费搭建网站?  如何在宝塔面板创建新站点?  织梦二次开发使栏目获取当前页*栏目图片的方法_织梦CMS教程  如何在阿里云购买域名并搭建网站?  建站之星安装步骤有哪些常见问题?  如何彻底删除建站之星生成的Banner?  网站TAG标签正确使用方法_SEO优化教程  建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略  织梦DEDECMS调出指定文章所有图片的代码_织梦CMS教程  建站助手安装PHP5.6为何频繁报错?  如何快速搭建FTP站点实现文件共享?  织梦dedecms{dede:channelartlist}标签栏目循环序号调用方法_织梦CMS教程  织梦修改下载地址{dede:field name='softlinks'/}只显示链接方法_织梦CMS教程  织梦dedecms自定义表单发送到指定邮箱-用*、163邮箱发送邮件_织梦插件  如何用5美元大硬盘VPS安全高效搭建个人网站?  家庭建站与云服务器建站,如何选择更优?  织梦列表页排序按权重排序修改方法_织梦CMS教程  建站之星ASP如何实现CMS高效搭建与安全管理?  如何通过VPS建站实现广告与增值服务盈利?  织梦dedecms自定义输出移动版上一篇下一篇文章_织梦CMS教程  织梦cms列表页随机调用缩略图_织梦CMS教程  织梦上传附件不自动改名,且附件中文名自动改为拼音教程_织梦CMS教程  如何配置FTP站点权限与安全设置?  如何通过NAT技术实现内网高效建站?  织梦自定义字段为空时显示不同的内容_织梦CMS教程  建站企业服务器配置方案:性能优化与CDN加速策略解析  织梦cms tags标签静态化,利于SEO_织梦CMS教程  如何有效防御Web建站篡改攻击?  如何选择适合PHP云建站的开源框架?  织梦*搜索功能实现身份证驾驶证信息查询系统_织梦CMS教程  如何通过wdcp面板快速创建网站?  织梦dedecms的自定义表单带上当前页面的url地址_织梦CMS教程  dedecms织梦*幻灯片插件下载_织梦插件  高防服务器如何保障网站安全无虞?  织梦友情链接标签dede:flink使用limit标签方法_织梦CMS教程  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  如何通过WDCP绑定主域名及创建子域名站点?  织梦DEDECMS列表页缩略图随机调用教程_织梦CMS教程  如何在企业微信快速生成手机电脑官网? 

 2018-03-31

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

南京市珐之弘网络技术有限公司


南京市珐之弘网络技术有限公司

南京市珐之弘网络技术有限公司专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 87067657

 13565296790

 87067657@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.