asp批量导入导出csv文件的例子

 

CSV是Comma Separated Value(逗号分隔值)的英文缩写,通常都是以英文的逗号(,)做为分隔符的纯文本文件。 为什么要用CSV格式的文件导入导入呢?因为EXCEL文件有太多格式,比如字体大小、颜色等等,这些格式基本上是无用的,导入数据库反而占用太多空间。当然,程序处理最方便的是XML文件(什么是XML文件,请查阅这里),但是XML对普通用户不太友好,而用EXCEL编辑CSV文件,相信是最合适的选择了。原创文章,转载请注明来自风易博客:http://www.1982y.net.cn 。

基于这些理由,客户又有这样的需求,那么我就写了一个asp批量导入导出CSV文件的例子,特发出来与大家共享。

上传文件,我用的是无组件的“无惧上传”,使用方法请大家自行Google。上传处理页代码如下:

ASP/Visual Basic代码
  1. '---------------------------------------上传CSV文件  
  2. Sub uploadfile()  
  3.     set upload=new upfile_class ''建立上傳物件  
  4.     upload.GetData(Maxsize)   '取得上傳資料,限制最大上傳($Maxsize) MB  
  5.     if upload.err > 0 then  '有错误发生  
  6.         select case upload.err  
  7.             case 1  
  8.                 okway.showErr "请选择您要上传的文件。/n如果您已经选择了文件,请确认您选择的是否空文件!","JS:history.back();try{ document.xfiles.upload.disabled=false;} catch(e) {};"  
  9.                 response.end()  
  10.             case 2  
  11.                 okway.showErr "你上传的文件体积超出了最大限制("& Maxsize/1024/1024 & "MB)","JS:history.back();try{ document.xfiles.upload.disabled=false;} catch(e) {};"  
  12.                 response.End()  
  13.         end select  
  14.     End If  
  15.   
  16.     Dim FileExt : FileExt = "csv" '限定上传的文件格式  
  17.     Dim Filename : Filename = "csvTemp/geili2011.csv" '限定上传的文件名称  
  18.   
  19.     for each formName in upload.file '列出所有上傳了的文件  
  20.         set ofile=upload.file(formName)  '生成一個文件物件  
  21.         if ofile.filesize<1 then  
  22.             okway.showErr "请选择您要上传的文件。/n如果您已经选择了文件,请确认您选择的是否空文件!","JS:history.back();try{ document.xfiles.upload.disabled=false;} catch(e) {};"  
  23.             Exit For  
  24.         end if  
  25.         if ofile.filesize>(Maxsize) then  
  26.             okway.showErr "你上传的文件体积超出了最大限制("& Maxsize/1024/1024 & "MB)","JS:history.back();try{ document.xfiles.upload.disabled=false;} catch(e) {};"  
  27.             Exit For  
  28.         end If  
  29.           
  30.         If LCase(ofile.FileExt) <> FileExt Then  
  31.             okway.showErr "抱歉,只能上传"&FileExt&"格式的文件","JS:history.back();try{ document.xfiles.upload.disabled=false;} catch(e) {};"  
  32.             Exit For  
  33.         End If  
  34.   
  35.         '保存上传文件  
  36.         ofile.SaveToFile Server.mappath(Filename)  
  37.         set ofile=Nothing  
  38.     Next  
  39.     set upload=Nothing  
  40.     session("geili2011") = Filename '保存文件名以待后续处理  
  41.     Okway.ShowSuc "恭喜您,文件上传成功,请点击[确定]继续",Okway.ScriptName  
  42. End Sub  

然后分析上传的CSV文件是否符合格式:

ASP/Visual Basic代码
  1. '---------------------------------------分析CSV文件  
  2. Function checkfile()  
  3.     Dim Fso,myFile,i  
  4.     Dim Str,objs,tmpstr,column,css  
  5.     column = "姓名,电话,公司名称,Email,博客或公司网址,预购产品,预购日期"  
  6.     Set Fso = Server.CreateObject("Scripting.FileSystemObject")  
  7.     If Not Fso.FileExists(Server.MapPath(session("geili2011"))) Then  
  8.         session("geili2011") = ""  
  9.         okway.ShowSuc "错误1:抱歉,CSV文件不存在,请重新上传。",Okway.ScriptName  
  10.         Exit Function  
  11.     End If  
  12.   
  13.     Set myFile = Fso.OpenTextFile(Server.MapPath(session("geili2011")),1,True)  
  14.     i = 0  
  15.     tmpstr = "<br /><div style='padding-left:5px;height:40px;line-height:40px;font-weight:bold'>*请确认导入的数据是否正确</div><table width=""100%""  border=""1"" cellspacing=""0"" cellpadding=""0"" style=""border:1px;"">"&VbNewline  
  16.     While Not myFile.AtEndOfStream  
  17.         Str = myFile.ReadLine  
  18.         objs = Split(Str,",")  
  19.         If UBound(objs) <> 6 Then  
  20.             session("geili2011") = ""  
  21.             Okway.ShowSuc "错误1:抱歉,你传入的CSV格式不正确,请按格式重新编辑后再上传。",Okway.ScriptName  
  22.             Exit Function  
  23.         End If  
  24.         css = " style=""padding-left:5px;"""  
  25.         If i = 0 Then   
  26.             If LCase(Replace(Str,",","")) <> LCase(Replace(column,",","")) Then  
  27.                 session("geili2011") = ""  
  28.                 Okway.ShowSuc "错误2:抱歉,你传入的CSV格式不正确,请按格式重新编辑后再上传。",Okway.ScriptName  
  29.                 Exit Function  
  30.             End If  
  31.             css = " style=""padding-left:5px;font-weight:bold"""  
  32.         End If  
  33.         tmpstr = tmpstr & "<tr height=""25"">"&VbNewline  
  34.         tmpstr = tmpstr & "<td "&css&">"&objs(0)&" </td>""<td "&css&">"&objs(1)&" </td>""<td "&css&">"&objs(2)&" </td>""<td "&css&">"&objs(3)&" </td>""<td "&css&">"&objs(4)&" </td>""<td "&css&">"&objs(5)&" </td>""<td "&css&">"&objs(6)&" </td>"  
  35.         tmpstr = tmpstr & "</tr>"&VbNewline  
  36.         i = i + 1  
  37.     Wend  
  38.     tmpstr = tmpstr & "<tr height=""50"">"&VbNewline  
  39.     tmpstr = tmpstr & "<td colspan=""7"" align=""center""><input type=""button"" value=""确认并导入"" οnclick=""window.location.href = '"&Okway.ScriptName&"?act=insert'"" />    <input type=""button"" value=""返回重新上传"" οnclick=""window.location.href = '"&Okway.ScriptName&"?act=back'"" /></td>"  
  40.     tmpstr = tmpstr & "</tr>"&VbNewline  
  41.     tmpstr = tmpstr & "</table>"&VbNewline  
  42.     myFile.Close  
  43.     Set myFile = Nothing  
  44.     Set Fso = Nothing  
  45.     checkfile = tmpstr  
  46. End Function  

最后,可根据需要把CSV文件导入数据库:

ASP/Visual Basic代码
  1. '---------------------------------------把CSV文件写入数据库  
  2. Sub insertDb()  
  3.     Dim Fso,myFile,i,sqlcmd,addTime  
  4.     Set Fso = Server.CreateObject("Scripting.FileSystemObject")  
  5.     If Not Fso.FileExists(Server.MapPath(session("geili2011"))) Then  
  6.         session("geili2011") = ""  
  7.         Okway.ShowSuc "错误2:CSV文件不存在,请重新上传。",Okway.ScriptName  
  8.         Exit Sub  
  9.     End If  
  10.     Set myFile = Fso.OpenTextFile(Server.MapPath(session("geili2011")),1,True)  
  11.     i = 0  
  12.     While Not myFile.AtEndOfStream  
  13.         Str = myFile.ReadLine  
  14.         objs = Split(Str,",")  
  15.         If i <> 0 Then  
  16.             addTime = objs(6)  
  17.             If addTime = "" Or Not IsDate(addTime) Then addTime = Now()  
  18.             sqlcmd = "insert into [Ok_Geili2011](TxtName,TxtTel,TxtCompanyCn,TxtEmail,TxtWebsite,TxtProduct,addTime) values('"&Okway.safelysql(objs(0))&"','"&Okway.safelysql(objs(1))&"','"&Okway.safelysql(objs(2))&"','"&Okway.safelysql(objs(3))&"','"&Okway.safelysql(objs(4))&"','"&Okway.safelysql(objs(5))&"','"&addTime&"')"  
  19.             conn.Execute(sqlcmd)  
  20.         End If  
  21.         i = i + 1  
  22.     Wend  
  23.     session("geili2011") = ""  
  24.     Okway.ShowSuc "恭喜您,文件导入成功,请点击[确定]查看","geili2011_list.asp"  
  25. End Sub  

当用户发现自己上传的CSV文件内容有误时,可以点击反回按钮修改,返回的时候清除保存的文件名:

ASP/Visual Basic代码
  1. '---------------------------------------CSV文件内容不正确,返回重新上传  
  2. Sub backUrl()  
  3.     session("geili2011") = ""  
  4.     Okway.ShowSuc "",Okway.ScriptName  
  5. End Sub  

至此,上传部分已经完成了,下面写如何导出,导出就比较简单了,直接用文件流写入浏览器即可。

我们知道CSV文件是以英文逗号分隔的,为了避免数据库字段中有英文逗号导致导出的内容出错,所以需要把英文逗号过滤一下,代码如下:

ASP/Visual Basic代码
  1. Function fixCSV(str)  
  2.     If str = "" Or IsNull(str) Then Exit Function  
  3.     str = Replace(str,",",",")  
  4.     fixCSV = str  
  5. End Function  

然后直接读出数据库内容写入浏览器即可:

ASP/Visual Basic代码
  1. If request("act")="download" Then   
  2.     Response.Clear()  
  3.     Response.AddHeader "Content-Disposition","attachment;filename=geili2011list.csv;"  '这里自定义导出的文件名  
  4.     Response.ContentType = "application/octet-stream"  
  5.     Response.Write "姓名,电话,公司名称,Email,博客或公司网址,预购产品,预购日期"  
  6.     Response.Write(vbcrlf)  
  7.     sql ="select * from [Ok_Geili2011] order by id desc"  
  8.     Set rs = conn.execute(sql)  
  9.     Do While Not rs.eof   
  10.         echo fixCSV(rs("TxtName")) & "," & fixCSV(rs("TxtTel")) & "," &fixCSV(rs("TxtCompanyCn")) & "," &fixCSV(rs("TxtEmail")) & "," &fixCSV(rs("TxtWebsite")) & "," &fixCSV(rs("TxtProduct")) & "," & fixCSV(rs("addTime"))  
  11.         echo(vbcrlf)  
  12.         rs.movenext  
  13.     Loop   
  14.     rs.close : Set rs = Nothing  
  15.     Response.End   
  16. End If    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值