账号通
    

账号  

密码  

18759

查看

48

回复
主题:完善EXCEL批量上传功能,,,,附源码 [收藏主题] 转到:  
ahwh 当前离线

101

主题

1

广播

5

粉丝
添加关注
级别:一年级

用户积分:977 分
登录次数:318 次
注册时间:2009/4/10
最后登录:2020/3/27
ahwh 发表于:2012/3/10 22:05:50   | 显示全部帖子 查看该作者主题 楼主 
科汛智能建站系统

前提:因为最近做了个会议注册类的网站。。有了这方面的心得,更为了完善科汛论坛的技术支持力量做点贡献,,把自己的制作心得贴出来,旨意为普通站长累积经验,用好科汛,用熟科汛,多用科汛。高手请略过。为谢。。。。。。。



第一篇贴子:科汛后台变前台,思路分享,高手略过http://bbs.kesion.com/forumthread-356979.html

第二篇贴子:数据库导出真正的EXCEL文件---附源码http://bbs.kesion.com/forumthread-387250.html

如有部分地方不合适,请管理员放行。





第一步,准备工作,,

如完成批量上传功能,需要服务器支持EXCEL导入的条件,比如服务器需要安装最新的OFFICE,组件服务中放宽EXCEL的读写条件,OBDC中有EXCEL组件,,,,原因很简单,因为需要ASP调用EXCEL,当然需要服务器有EXCEL组件,并且允许进行读写操作。

做好准备工作,即可开始了。。

下面以我做的导入为例,讲一下如何制作批量导入有不对的地方,就指正,共同提高。谢谢。。点击查看原图首页我面对的对象是身边的人,并不一定对网络或源码懂多少,所以在导入之前进行一下叙述。。

我在源码中加入了一个隐藏层,点击批量导入时,显示批量导入层的注意事项。。

点击查看原图

在这个页面中,我需要获取当前栏目的ID号,,这个在科汛的标签中有。即{$GetClassID} 。栏目ID传入到下个页面中作为选择导入某个栏目作准备。。我是储存到ID为 NMBJ的变量中,如上图所示。



原打算利用科汛的文件上传功能,但我怎么研究也研究不透他的源码,,,,,就不要用他的了,我就自己根据网上现有的上传功能DIV了一个。下载的附件中有上传源码。

如下图所示。

点击查看原图





第二步,打造自己个性的导入界面。。。



科汛后台插件中的批量导入功能文件是 ADMIN/KS.Import.asp 该文件,打开文件不难发现,,文件被分成三部分。Step1 Step2 Step3 就是第一步第二步第三步。。。。当然这个文件是ASP文件,所以显示出来的部分是HTML的。。。你可以做好HTML后的源码,转换成ASP。在贴入KS.Import.asp内,如果你HTML都不懂,那没办法,去学前班吧。



第一步是指定文件导入类型,文件的路径,测试文件,我把改造成如下界面。。。

点击查看原图

这一步中,没有选择需要导入哪个栏目,所以我做了二次传递,我自己也研究不出来,只能这么做了。。。意思是指,在一开始获取栏目ID的时候,传给第一步,然后在第一步中我在次传递给第二步。。然后赋值给第二步的选择栏目的表单中。。。看起来复杂,其实加起来,四行代码。我已经把上页传递的值填加进去了,并隐藏了,你可以用DW软件,搜一下mybj,就知道我都填加在什么地方了。。。

搜一下<option value=""111"" selected=""selected"">会议注册(KS_U_hyzc)</option>,,这是选择到哪个模型中,,你可以改成你自己的。。value=""111"" 是模型的ID。。你在后台可以看到你需要导入模型的ID进行替换。

搜一下 /myfile/EXCEL.xls 是刚刚上传的EXCEL文件路径。。根据需要你可以更改。我已经在上传的那些原码里设置了这个路径,如需要更改。请连同那里面的路径一起更改。



第二步,主要的操作是,指定导入哪个栏目,选择内容页文件,选择是否自动生成文件名,选择导入的EXCEL文件列表头和数据库哪个列表头对应。。。在完成以上的条件下,我精简了该界面。如下图

点击查看原图

当然上述的什么选择栏目,选择内容页文件,,等等,包括一些其他的不需要的。我都已经设定好了,并隐藏起来了。。。在文件中分别是

选择栏目: '===================================栏目ID=====================================

.echo "<tr style='display:none' class='tdbg'><td height='25' align='right' class='clefttitle'>所属栏目:</td><td><label><input type='radio' value='1' name='tidtype'getClass(1)"" checked/>直接导入指定的栏目</label> <br/><label><input type='radio'getClass(2)"" name='tidtype' value='2'>读取数据源的栏目ID</label>"

.echo " </td></tr>"



.echo "<tr style='display:none' class='tdbg' id='stid1'><td height='25' align='right' class='clefttitle'></td><td><select size='1' name='tid1' id='tid1' style='width:160px'>"

.echo "<option value='"&mybj2&"' selected>"&mybj2&"</option></select></td></tr>"



.echo "<tr style='display:none' class='tdbg' id='stid2' style='display:none'><td height='25' align='right' class='clefttitle'></td><td><select name='tid2'><option value='"&mybj2&"' selected>"&mybj2&"</option>"

.echo ShowField("tid")

.echo " </select> =>栏目ID(Tid)*</td></tr>"

'============================================================='"&mybj2&"' selected>"&mybj2&"</option>"即是我传递了二次过来的栏目ID。。mybj2是我自定义的变量。



选择模板



  '==================================模板ID=======================================================

   .echo "<tr style='display:none'  class='tdbg'><td height='25' align='right' class='clefttitle'>绑定模板:</td><td><label><input type='radio' value='1' name='templatetype'getTemplate(1)"" checked/>选择模板并绑定</label> <br/><label><input type='radio'getTemplate(2)"" name='templatetype' value='2'>读取数据源的模板</label></td></tr>"

   .echo "<tr style='display:none'  class='tdbg' id='stemplate1'><td height='25' align='right' class='clefttitle'></td><td><input id='TemplateID' name='TemplateID' readonly size=20 class='textbox' value=;" & KSCls.Get_KS_T_C("$('#TemplateID')[0]") &"  =>模板(TemplateID)*</td></tr>"

   .echo "<tr style='display:none'  class='tdbg' id='stemplate2' style='display:none'><td height='25' align='right' class='clefttitle'></td><td><select name='templateid2'><option value='0'>-此项不导入-</option>"

   .echo ShowField("templateid")

   .echo " </select> =>模板(TemplateID)*</td></tr>"



/nr.html即是我指定的模板文件。根据需要自行修改。



'==================================文件名=======================================================

.echo "<tr style='display:none' class='tdbg'><td height='25' align='right' class='clefttitle'>文件名:</td><td><label><input type='radio' value='1' name='Fnametype'getFname(1)"" checked/>自动生成</label> <br/><label><input type='radio'getFname(2)"" name='Fnametype' value='2'>读取数据源的文件名</label>"

.echo " </td></tr>"

.echo "<tr style='display:none' class='tdbg' id='sfname' style='display:none'><td height='25' align='right' class='clefttitle'></td><td><select name='Fname'><option value='0'>-此项不导入-</option>"

.echo ShowField("Fname")

.echo " </select> =>文件名(Fname)*</td></tr>"

'=================================================================================================

文件名也选择成了自动生成。如上代码所示。

注意。。。。以下这段代码

   Dim FieldArr,K

   FieldArr=KSCls.Get_KS_D_F_P_Arr(ChannelID,"")

   If IsArray(FieldArr) Then

     For K=0 TO Ubound(FieldArr,2)

.echo "<tr class='tdbg'><td style=""font-size:16px; line-height:16px;font-family:微软雅黑; text-align:right; padding-right:10px;"">" & FieldArr(1,k) & "</td><td height='25' align='right' class='clefttitle'>"

.echo "<select style=""font-size:16px; line-height:16px;width:160px;  font-family:微软雅黑; text-align:center; "" border='0' name='" & FieldArr(0,k) & "'><option value='" & FieldArr(1,k) & "'  selected>." & FieldArr(1,k) & "-</option>"

   .echo ShowField(FieldArr(0,k))

   .echo " </select> </td>"

   .echo " <td style=""font-size:16px; line-height:16px;font-family:微软雅黑; text-align:left; padding-right:10px;"">=> " & FieldArr(1,k) & "(" & FieldArr(0,k) & ")</td></tr>"

     Next

   End If



这段的意思是,建立一个变量组,把要批量导入的EXCEL表单每一行都读取出来,并且做成选择,和数据库的值对应起来,科汛的源码不是这样的。科汛的源码是让你选择哪项导入哪项不导入,并且具体到哪个值才是数据库的对应值。。。我怕麻烦,就直接给改动了一下,定位死了。所以EXCEL中的值一定要和数据库的值一样。。。。如果怕和你不一样。我把科汛原来的源码给你贴出来,你可以更换,以下是科汛原来的

Dim FieldArr,K

FieldArr=KSCls.Get_KS_D_F_P_Arr(ChannelID,"")

If IsArray(FieldArr) Then

For K=0 TO Ubound(FieldArr,2)

.echo "<tr class='tdbg'><td style=""font-size:16px; line-height:16px;font-family:微软雅黑; text-align:right; padding-right:10px;"">" & FieldArr(1,k) & "</td><td height='25' align='right' class='clefttitle'>"

.echo "  <select  style=""font-size:16px; line-height:16px;width:160px;  font-family:微软雅黑; text-align:center; "" name='" & FieldArr(0,k) & "'><option value='0'  selected>-此项不导入-</option><option value='" & FieldArr(1,k) & "'>" & FieldArr(1,k) & "</option>"

.echo " </select></td>"

.echo " <td> =>" & FieldArr(1,k) & "(" & FieldArr(0,k) & ")</td></tr>"

Next

End If











第三步,就是导入数据的完成情况。如果一切正常,就是显示如下界面。



点击查看原图

大功告成。。

从我设想到完成,这些天。遇到不少麻烦。主要是我的功底太差。还需要多多的学习,完善自己,如有不同意思,请给板砖。。。

编后话。

当完成了批量导入的时候,心里那个成就感不要说了。呵呵。开心的嘞。。。。。。。

你有没有发现有漏洞的地方,,,,,呵,有。。就是导入后,源文件还在那个地方,并且还可以点击导入进行导入。这样就造成了重复导入,反而所作的得不偿失。。。因此我在根目录的INDEX.ASP文件,最上方加了如下代码。

<%

dim filename,fs

Set fs = server.CreateObject("scripting.filesystemobject")  

'--假设你想让生成的EXCEL文件做如下的存放  

filename = Server.MapPath("/myfile/excel.xls")  

'--如果原来的EXCEL文件存在的话删除它  

if fs.FileExists(filename) then  

fs.DeleteFile(filename)  

end  if  

Set fs = nothing

%>

这段的意思是一打开网站,就直接指向那个/myfile/excel.xls 并删除excel.xls,,这样就避免了重复导入的错误。

我把涉及到所文件都放到了压缩包里了。根据个人需要进行修改。

admin/KS.Import.asp  批量导入主文件

save.asp,upload_class.asp 无组件ASP上传文件

IMG 包括图片及CSS文件

template/nm.html 批量导入的入口文件,也是模板文件

MYFILE/模板.EXCEL,EXCEL.xls 分别是EXCEL的模板和已经上传好要导入的EXCEL文件。

收贴,睡觉。

如果有时间,我把在添加栏目时自定义数据库字段的心得贴出来。。。。



以下内容只有回复后才可以浏览,请先登录!







 
  支持(0) | 反对(0) 回到顶部顶端 回到底部底部
<上一主题 | 下一主题 >
Powered By KesionCMS Version X1
厦门科汛软件有限公司 © 2006-2016 页面执行0.18750秒 powered by KesionCMS 9.0