欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

介紹一種用ASP+模板生成Word、Excel、靜態(tài)頁面一種簡(jiǎn)單、靈活多變的辦法

admin
2010年8月3日 22:19 本文熱度 5273
1# 發(fā)表于 2008-6-16 00:41 
由于工作的需要,我需要為客戶做一個(gè)在線生成excel及word報(bào)表程序,參考了網(wǎng)上很多辦法,大多數(shù)都是采用excel.application(http://www.blueidea.com/tech/program/2006/3547.asp)組件來生成,發(fā)現(xiàn)容易出錯(cuò),而且對(duì)于大多數(shù)和我一樣的菜鳥來說,比較麻煩,考慮到前些天用asp+模板+adodb.stream生成靜態(tài)頁面的辦法,經(jīng)過多次嘗試,終于掌握了一種用asp+模板生成excel和word的新的辦法,先分享如下:
    用模板生成excel、word最大優(yōu)點(diǎn)
    word、excel文檔樣式易于控制和調(diào)整,以往用excel.application來生成excel、word,需要寫很多代碼來控制排版的樣式,用模版幾乎不受任何限制,只需要打開word或excel,編輯文檔,選擇"文件->另存為web頁",即可方便的做好模板用office生成的模板要比直接在dw中做好模板更加符合office偏好,生成后文件樣式可與原word、excel格式99%一樣,因此建議大家用office(office97~office2003)直接來生成模板框架

   演示:http://mysheji.com/aspcreate/
   主要的代碼
function.asp
復(fù)制內(nèi)容到剪貼板
代碼:
<%
'歡迎與我交流和學(xué)習(xí)
'作者:幸福的子彈
'blog:http://mysheji.com/blog
'e-mail:zhaojiangang@gmail.com
'qq:37294812
'-----------------------------------------------------------------------------
'開啟容錯(cuò)機(jī)制
on error resume next
'功能,檢測(cè)服務(wù)器是否支持指定組件
function object_install(strclassstring)
  on error resume next
  object_install=false
  dim xtestobj
  set xtestobj=server.createobject(strclassstring)
  if -2147221005 <> err then object_install=true
  set xtestobj=nothing
end function
if object_install("scripting.filesystemobject")=false then
    response.write "<div style='color:#333;height:20px;line-height:20px;border:1px solid #ddcf8f;padding:6px;background:#ffffed;font-family:verdana'>對(duì)不起,您的空間不支持fso組件,請(qǐng)與管理員聯(lián)系!</div>"
    response.end
end if
if object_install("adodb.stream")=false then
    response.write "<div style='color:#333;height:20px;line-height:20px;border:1px solid #ddcf8f;padding:6px;background:#ffffed;font-family:verdana'>對(duì)不起,您的空間不支持adodb.stream功能,請(qǐng)與管理員聯(lián)系!</div>"
    response.end
end if
'-----------------------------------------------------------------------------
'函數(shù)名稱:readtextfile
'作用:利用adodb.stream對(duì)象來讀取文本文件
'參數(shù):fileurl文件相對(duì)路徑,filecharset:文件編碼
function readfromtextfile (fileurl,filecharset)'函數(shù)
    dim str
    set stm=server.createobject("adodb.stream")
    stm.type=2 '指定或返回的數(shù)據(jù)類型,
    stm.mode=3 '指定打開模式,現(xiàn)在為可以讀寫模式,類似于word的只讀或鎖定功能
    stm.charset=filecharset
    stm.open
    stm.loadfromfile server.mappath(fileurl)
    str=stm.readtext
    readfromtextfile=str
end function
'-----------------------------------------------------------------------------
'函數(shù)名稱:writetotextfile
'作用:利用adodb.stream對(duì)象來寫入文本文件
sub writetotextfile(fileurl,str,filecharset) '方法
    set stm=server.createobject("adodb.stream")
    stm.type=2
    stm.mode=3
    stm.charset=filecharset
    stm.open
    stm.writetext str
    stm.savetofile server.mappath(fileurl),2
    stm.flush
end sub
'-----------------------------------------------------------------------------
'功能:自動(dòng)創(chuàng)建文件夾
'創(chuàng)建一級(jí)或多級(jí)目錄,可以創(chuàng)建不存在的根目錄
'參數(shù):要?jiǎng)?chuàng)建的目錄名稱,可以是多級(jí)
'返回邏輯值,true成功,false失敗
'創(chuàng)建目錄的根目錄從當(dāng)前目錄開始
function createmultifolder(byval cfolder)
dim objfso,phcreatefolder,createfolderarray,createfolder
dim i,ii,createfoldersub,phcreatefoldersub,blinfo
blinfo = false
createfolder = cfolder
on error resume next
set objfso = server.createobject("scripting.filesystemobject")
if err then
err.clear()
exit function
end if
createfolder = replace(createfolder,"","/")
if left(createfolder,1)="/" then
createfolder = right(createfolder,len(createfolder)-1)
end if
if right(createfolder,1)="/" then
createfolder = left(createfolder,len(createfolder)-1)
end if
createfolderarray = split(createfolder,"/")
for i = 0 to ubound(createfolderarray)
createfoldersub = ""
for ii = 0 to i
createfoldersub = createfoldersub & createfolderarray(ii) & "/"
next
phcreatefoldersub = server.mappath(createfoldersub)
if not objfso.folderexists(phcreatefoldersub) then
objfso.createfolder(phcreatefoldersub)
end if
next
if err then
err.clear()
else
blinfo = true
end if
createmultifolder = blinfo
end function
'點(diǎn)擊下載提示
function downloadfile(strfile)
     strfilename = server.mappath(strfile)
     response.buffer = true
     response.clear
     set s = server.createobject("adodb.stream")
     s.open
     s.type = 1
     on error resume next
     set fso = server.createobject("scripting.filesystemobject")
     if not fso.fileexists(strfilename) then
         response.write("<h1>error:</h1>" & strfilename & " does not exist<p>")
         response.end
     end if
     set f = fso.getfile(strfilename)
     intfilelength = f.size
     s.loadfromfile(strfilename)
     if err then
         response.write("<h1>error: </h1>" & err.description & "<p>")
         response.end
     end if
     response.addheader "content-disposition", "attachment; filename=" & f.name
     response.addheader "content-length", intfilelength
     response.charset = "utf-8"
     response.contenttype = "application/octet-stream"
     response.binarywrite s.read
     response.flush
     s.close
     set s = nothing
end function
'-----------------------------------------------------------------------------
if err then
    err.clear
    set conn = nothing
    response.write "<div style='color:#333;height:20px;line-height:20px;border:1px solid #ddcf8f;padding:6px;background:#ffffed;font-family:verdana'>網(wǎng)站異常出錯(cuò),請(qǐng)與管理員聯(lián)系,謝謝!</div>"
    response.end
end if
%>
[ 本帖最后由 hmilyheart 于 2008-6-16 09:49 編輯 ]
2# 發(fā)表于 2008-6-16 00:42 
生成word文檔:
復(fù)制內(nèi)容到剪貼板
代碼:
<%
'創(chuàng)建文件
dim templatename,templatechar,filepath,filename,filecharset,templatecontent
   templatename="template/template_word.htm"        '模板名字,支持帶路徑,如"/moban/moban1.htm"或"temp/moban1.htm"
   templatechar="gb2312"                      '模板文本的編碼
   filepath="files/word/"                     '生成文件保存的路徑,當(dāng)前目錄請(qǐng)留空,其他目錄,路徑必須以“/”結(jié)尾
   filename="doc1.doc"                           '即將生成的文件名
   createmultifolder(filepath)                '這一句用來判斷文件夾是否存在,沒有則自動(dòng)創(chuàng)建,支持n級(jí)目錄
   filecharset="gb2312"                       '打算生成的文本編碼
'讀取指定的模板內(nèi)容
templatecontent=readfromtextfile(templatename,templatechar)   
'以下就交給你來替換模板內(nèi)容了
templatecontent=replace(templatecontent,"{$websitename}","藍(lán)色理想")
templatecontent=replace(templatecontent,"{$username}","幸福的子彈")
templatecontent=replace(templatecontent,"{$now}",now())
'其他內(nèi)容......
'最終調(diào)用函數(shù)來生成文件         
call writetotextfile(filepath&filename,templatecontent,filecharset)   
'最后關(guān)閉adodb.stream對(duì)象
stm.flush
stm.close
set stm=nothing
downloadfile(filepath&filename)
%>
程序源碼:

[ 本帖最后由 hmilyheart 于 2008-6-16 00:45 編輯 ]

附件

aspcreate.rar (20.67 kb)

2008-6-16 00:45, 下載次數(shù): 327

本帖最近評(píng)分記錄
  • 帥青蛙 威望 +2 原創(chuàng)內(nèi)容 2008-6-16 09:43
3# 發(fā)表于 2008-6-16 00:43 
生成excel文檔:
復(fù)制內(nèi)容到剪貼板
代碼:
<%
'創(chuàng)建文件
dim templatename,templatechar,filepath,filename,filecharset,templatecontent
   templatename="template/template_excel.htm"        '模板名字,支持帶路徑,如"/moban/moban1.htm"或"temp/moban1.htm"
   templatechar="gb2312"                      '模板文本的編碼
   filepath="files/excel/"                     '生成文件保存的路徑,當(dāng)前目錄請(qǐng)留空,其他目錄,路徑必須以“/”結(jié)尾
   filename="book1.xls"                           '即將生成的文件名
   createmultifolder(filepath)                '這一句用來判斷文件夾是否存在,沒有則自動(dòng)創(chuàng)建,支持n級(jí)目錄
   filecharset="gb2312"                       '打算生成的文本編碼
'讀取指定的模板內(nèi)容
templatecontent=readfromtextfile(templatename,templatechar)   
'以下就交給你來替換模板內(nèi)容了
templatecontent=replace(templatecontent,"{$websitename}","藍(lán)色理想")
templatecontent=replace(templatecontent,"{$username}","幸福的子彈")
templatecontent=replace(templatecontent,"{$now}",now())
'其他內(nèi)容......
'最終調(diào)用函數(shù)來生成文件         
call writetotextfile(filepath&filename,templatecontent,filecharset)   
'最后關(guān)閉adodb.stream對(duì)象
stm.flush
stm.close
set stm=nothing
downloadfile(filepath&filename)
%>
4# 發(fā)表于 2008-6-16 00:43 
生成.htm靜態(tài)頁面
復(fù)制內(nèi)容到剪貼板
代碼:
<%
'創(chuàng)建文件
dim templatename,templatechar,filepath,filename,filecharset,templatecontent
   templatename="template/template_html.htm"        '模板名字,支持帶路徑,如"/moban/moban1.htm"或"temp/moban1.htm"
   templatechar="gb2312"                      '模板文本的編碼
   filepath="files/html/"                     '生成文件保存的路徑,當(dāng)前目錄請(qǐng)留空,其他目錄,路徑必須以“/”結(jié)尾
   filename="untitled-1.htm"                           '即將生成的文件名
   createmultifolder(filepath)                '這一句用來判斷文件夾是否存在,沒有則自動(dòng)創(chuàng)建,支持n級(jí)目錄
   filecharset="gb2312"                       '打算生成的文本編碼
'讀取指定的模板內(nèi)容
templatecontent=readfromtextfile(templatename,templatechar)   
'以下就交給你來替換模板內(nèi)容了
templatecontent=replace(templatecontent,"{$websitename}","藍(lán)色理想")
templatecontent=replace(templatecontent,"{$username}","幸福的子彈")
templatecontent=replace(templatecontent,"{$now}",now())
'其他內(nèi)容......
'最終調(diào)用函數(shù)來生成文件         
call writetotextfile(filepath&filename,templatecontent,filecharset)   
'最后關(guān)閉adodb.stream對(duì)象
stm.flush
stm.close
set stm=nothing
response.write("恭喜您,"&filename&"已經(jīng)生成,<a href="""&filepath&filename&""" target=""_blank"">點(diǎn)擊查看</a>")
%>

top

5# 發(fā)表于 2008-6-16 08:42 
我替我們程序員,收藏了。。。
來生還做兄弟

top

6# 發(fā)表于 2008-6-16 08:45 
謝謝樓上這些兄臺(tái),發(fā)現(xiàn)發(fā)錯(cuò)位置了, 版主有時(shí)間幫我轉(zhuǎn)移到“后臺(tái)數(shù)據(jù)庫(kù)編程”板塊~

top

7# 發(fā)表于 2008-6-16 09:00 
我替換我們單位的那些老頭子收下了

top

8# 發(fā)表于 2008-6-16 09:26 
想法很好!我以前也是這樣,不過不是用模板,直接把office文件另存為html,再改為asp,這樣通過程序生成word。樓主的這種方式真的很好!!

top

9# 發(fā)表于 2008-6-16 09:27 
要是樓主開發(fā)的是.net 版就好了.,頂.
http://www.qlili.com 個(gè)人站幫點(diǎn)啊

top

10# 發(fā)表于 2008-6-16 09:38 
不錯(cuò),正要找這方面的.收藏了.謝謝

top

11# 發(fā)表于 2008-6-16 09:54 
好不錯(cuò)的東西,我之前是 直接 在 asp里寫...里面的樣式都很亂...測(cè)試了這個(gè),基本一樣
www.idc0001.cn
找些人幫忙。。。

top

12# 發(fā)表于 2008-6-16 10:16 
引用:
原帖由 skybot 于 2008-6-16 09:27 發(fā)表
要是樓主開發(fā)的是.net 版就好了.,頂.
沒想到,鉆石級(jí)的會(huì)員,也會(huì)跟著瞎灌水...

說白了.生成的doc文件,其實(shí)還是一個(gè)html文件..

你把生成的doc的文件 用 記事本打開看看你就知道了...

將下面的代碼保存為doc文件,你用word打開.看看和html頁面的有多大區(qū)別.

 提示:您可以先修改部分代碼再運(yùn)行
總之.樓主所說的方法生成的并不是一個(gè)word文件,而是一個(gè)html文件,只不過擴(kuò)展名是doc而已,html文件把擴(kuò)展名改成doc,也可以用word打開..

而用word.application 控件生成的doc文件才是真正意義上的word文件...


生成成xsl文件也是如此.

[ 本帖最后由 faeng220 于 2008-6-16 10:22 編輯 ]

top

13# 發(fā)表于 2008-6-16 10:30 
呵呵,用樓上這種dw做的模板我也試過,發(fā)現(xiàn)生成的excel基本上改變了excel最初單元格的樣式,除了表格地方地方之外,excel其他地方會(huì)是一片白,也就是覆蓋了默認(rèn)其他一個(gè)個(gè)單元格的樣式,另外生成表格邊框也很不美觀。當(dāng)然,我說的這種方法也是模板的一種靈活應(yīng)用,只不過模板是office來制作。

用excel制作的模板生成excel文檔再好不過了

 提示:您可以先修改部分代碼再運(yùn)行
[ 本帖最后由 hmilyheart 于 2008-6-16 10:34 編輯 ]

top

14# 發(fā)表于 2008-6-16 10:39 
自動(dòng)化不夠高,思路不錯(cuò)。

如果模板支持一些簡(jiǎn)單的asp語法實(shí)際中可以大力推廣啦。
23555455(兩年以上工作經(jīng)驗(yàn)的web程序員生活q群)-博客

top

15# 發(fā)表于 2008-6-16 13:14 
  有沒有生成xml(例如rss輸出)的實(shí)例啊。
溜溜拍:66pai.net

top

16# 發(fā)表于 2008-6-16 14:01 
那你不如直接asp直接操作excel word方便些..
在用fso就可以

支持 原創(chuàng)的東西..

top

17# 發(fā)表于 2008-6-17 11:29 
收藏了,一直沒有很好的辦法進(jìn)行到處exl 有時(shí)候還不兼容,只做了csv的文件格式!謝謝!

top

18# 發(fā)表于 2008-6-17 13:35 
真不錯(cuò),感謝樓主

top

19# 發(fā)表于 2008-6-18 16:40 
思路不錯(cuò)。在一些不嚴(yán)格要求word或者excel格式的地方可以運(yùn)用。

top

20# 發(fā)表于 2008-6-18 17:33 
思路挺不錯(cuò)的,收藏了!謝謝樓主!

top

21# 發(fā)表于 2008-6-18 17:58 
我感覺樓主的這個(gè)方法就是把cnbruce發(fā)的那個(gè)asp模版生成html的方法修改了下后綴而以...

就像12#所說...生成的并不是真正意義上的excel或word,只是格式差不多html而以

我測(cè)試過生成excel,通過下面的方法生成excel是空白的....

但是如果我把后綴.xls改成.csv就可以了,目前還沒找到原因
復(fù)制內(nèi)容到剪貼板
代碼:
<%
on error resume next
dim db_path,conn,connstr
db_path = "data/data.mdb"
set conn= server.createobject("adodb.connection")
connstr = "provider=microsoft.jet.oledb.4.0;data source="&server.mappath(db_path)
    on error resume next
conn.open connstr
if err then
        err.clear
        set conn = nothing
        response.write "<script language=javascript> location.href='error.asp?msg=系統(tǒng)出錯(cuò),請(qǐng)聯(lián)系管理員!' </script>"
        response.end
    end if
set rs=server.createobject("adodb.recordset")
rs.open "select * from m_ss",conn,1,1
s=rs("s_main")
all=split(s,"|||")
for i=0 to 20
next
if not (rs.eof and rs.bof) then  
  dim ttxt,file,filepath,writefile
  ttxt="jb.csv"  '為要寫入的文件取個(gè)文件名,后綴可以是txt,xls,這里我用csv,這種文件打開也是excel表
  set file = createobject("scripting.filesystemobject")
  application.lock
  '寫入文件的存放路徑,一定要開放這個(gè)路徑下的讀寫權(quán)限
  filepath=server.mappath(ttxt)
  set writefile = file.createtextfile(filepath,true)
  '在表格中寫入第一行,字段描述,這個(gè)根據(jù)你實(shí)際的數(shù)據(jù)表字段來寫
  writefile.writeline "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"
  do while not rs.eof
  writefile.writeline rs("s_id")&","&rs("s_no")&","&rs("s_top")&","&rs("s_title")&","&rs("s_name")&","&rs("s_add")&","&rs("s_ajlx")&","&rs("s_fy1")&","&rs("s_fy2")&","&rs("s_fy3")&","&rs("s_fg1")&","&rs("s_fg2")&","&rs("s_fg3")&","&rs("s_yg")&","&rs("s_bg")&","&all(0)&","&all(1)&","&all(2)&","&all(3)&","&all(4)&","&all(5)&","&all(6)&","&all(7)&","&all(8)&","&all(9)&","&all(10)&","&all(11)&","&all(12)&","&all(13)&","&all(14)&","&all(15)&","&all(16)&","&all(17)&","&all(18)&","&all(19)&","&rs("s_ly")&","&rs("s_bz")&","&rs("s_sfz")&","&rs("s_time")   
  rs.movenext
  loop
  '以上三行作用是逐行將數(shù)據(jù)寫入表中
  writefile.close
  application.unlock
  rs.close
  set rs=nothing
end if
rs.close
set rs=nothing
response.write "數(shù)據(jù)導(dǎo)出成功!"
response.end
%>

top

22# 發(fā)表于 2008-6-18 18:16 
不錯(cuò). .謝謝 樓主
<阿龍> donaldsu.cn

top

23# 發(fā)表于 2008-6-18 20:39 
謝謝大家的支持,其實(shí)我主要告訴大家的是借用模板來生成而非告訴大家用fso或adodb.stream可以生成excel(因?yàn)楹芏嗳艘呀?jīng)知道fso或adodb.stream能生成excel或其他文本)
用fso或adodb.stream很久之前可以實(shí)現(xiàn)了,就想我剛開始做一樣,也寫了很多很多的代碼,維護(hù)起來也不方便。
復(fù)制內(nèi)容到剪貼板
代碼:
<%
session.codepage=936                          '字符編碼
response.charset="gb2312"
dim fso,excelcenter,filename,titlestyle
set fso=server.createobject("scripting.filesystemobject")
filename="carmod.xls"
titlestyle="style=""background:#0874ca;color:#fff;font-weight:bold;text-align:center"""
  strexcelfile=server.mappath(filename)
  if fso.fileexists(strexcelfile) then fso.deletefile strexcelfile
  set xslfile = fso.createtextfile(strexcelfile , true)
excelcenter="<table border=""1"" cellspacing=""1"" cellpadding=""1"" width=600>"&vblf&_
"<tr>"&vblf&_
"<td width=50 "&titlestyle&">id</td><td width=100 "&titlestyle&">車主姓名</td><td width=200 "&titlestyle&">車主電話</td><td width=150 "&titlestyle&">車牌號(hào)</td><td width=150 "&titlestyle&">車架號(hào)</td></tr>"&vblf&_
"<tr>"&vblf&_
"<td>121</td><td>幸福的子彈</td><td>13630026616</td><td>粵745125</td><td>jiadfsdfjsdfsd</td></tr>"&vblf&_
  "</table>"
  xslfile.writeline(excelcenter)
  xslfile.close
  set fso=nothing
  response.write("ok")
%>
以上生成的excel背景變成了全白色,只有表格地方才顯示邊框,不符合我們的要求。
另外一種方法,背景及空白單元格顯示正常,但也是懶得去寫代碼
復(fù)制內(nèi)容到剪貼板
代碼:
……
excelcenter="id" & vbtab & "username" & vbtab &"password" & vbtab& "works" &vblf&_
            "12" & vbtab & "小王" & vbtab &"123456" & vbtab& "網(wǎng)頁設(shè)計(jì)"
             ……
xslfile.writeline(excelcenter)
……
樓上這位和12#都說并非是真正意義上的excel,哈哈,我也不是很懂,希望有空能給我和大家解釋一下“真正意義上的excel”是什么一種概念
在此也希望大家能找到其他更好的辦法。

[ 本帖最后由 hmilyheart 于 2008-6-18 20:50 編輯 ]

top

24# 發(fā)表于 2009-11-25 13:35 
剛搜到,謝啦!

top

25# 發(fā)表于 2009-11-25 22:47 
樓主的思路很好,

fso生成excel,沒有樣式,樓主的思路贊!
加入標(biāo)準(zhǔn)化

top

26# 發(fā)表于 2010-6-22 12:37 
帖子很好,可是如果要用asp生成excel,這樣替換出來的是文本,怎么樣可以替換出來是數(shù)字。

top

27# 發(fā)表于 2010-6-23 13:42 
好厲害 謝謝樓樓
馬上去試試效果
可以直接導(dǎo)出報(bào)表了~~

該文章在 2010/8/3 22:19:58 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved