狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

介紹一種用ASP+模板生成Word、Excel、靜態頁面一種簡單、靈活多變的辦法

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

   演示:http://mysheji.com/aspcreate/
   主要的代碼
function.asp
復制內容到剪貼板
代碼:
<%
'歡迎與我交流和學習
'作者:幸福的子彈
'blog:http://mysheji.com/blog
'e-mail:zhaojiangang@gmail.com
'qq:37294812
'-----------------------------------------------------------------------------
'開啟容錯機制
on error resume next
'功能,檢測服務器是否支持指定組件
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'>對不起,您的空間不支持fso組件,請與管理員聯系!</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'>對不起,您的空間不支持adodb.stream功能,請與管理員聯系!</div>"
    response.end
end if
'-----------------------------------------------------------------------------
'函數名稱:readtextfile
'作用:利用adodb.stream對象來讀取文本文件
'參數:fileurl文件相對路徑,filecharset:文件編碼
function readfromtextfile (fileurl,filecharset)'函數
    dim str
    set stm=server.createobject("adodb.stream")
    stm.type=2 '指定或返回的數據類型,
    stm.mode=3 '指定打開模式,現在為可以讀寫模式,類似于word的只讀或鎖定功能
    stm.charset=filecharset
    stm.open
    stm.loadfromfile server.mappath(fileurl)
    str=stm.readtext
    readfromtextfile=str
end function
'-----------------------------------------------------------------------------
'函數名稱:writetotextfile
'作用:利用adodb.stream對象來寫入文本文件
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
'-----------------------------------------------------------------------------
'功能:自動創建文件夾
'創建一級或多級目錄,可以創建不存在的根目錄
'參數:要創建的目錄名稱,可以是多級
'返回邏輯值,true成功,false失敗
'創建目錄的根目錄從當前目錄開始
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
'點擊下載提示
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'>網站異常出錯,請與管理員聯系,謝謝!</div>"
    response.end
end if
%>
[ 本帖最后由 hmilyheart 于 2008-6-16 09:49 編輯 ]
2# 發表于 2008-6-16 00:42 
生成word文檔:
復制內容到剪貼板
代碼:
<%
'創建文件
dim templatename,templatechar,filepath,filename,filecharset,templatecontent
   templatename="template/template_word.htm"        '模板名字,支持帶路徑,如"/moban/moban1.htm"或"temp/moban1.htm"
   templatechar="gb2312"                      '模板文本的編碼
   filepath="files/word/"                     '生成文件保存的路徑,當前目錄請留空,其他目錄,路徑必須以“/”結尾
   filename="doc1.doc"                           '即將生成的文件名
   createmultifolder(filepath)                '這一句用來判斷文件夾是否存在,沒有則自動創建,支持n級目錄
   filecharset="gb2312"                       '打算生成的文本編碼
'讀取指定的模板內容
templatecontent=readfromtextfile(templatename,templatechar)   
'以下就交給你來替換模板內容了
templatecontent=replace(templatecontent,"{$websitename}","藍色理想")
templatecontent=replace(templatecontent,"{$username}","幸福的子彈")
templatecontent=replace(templatecontent,"{$now}",now())
'其他內容......
'最終調用函數來生成文件         
call writetotextfile(filepath&filename,templatecontent,filecharset)   
'最后關閉adodb.stream對象
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, 下載次數: 327

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

top

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

top

6# 發表于 2008-6-16 08:45 
謝謝樓上這些兄臺,發現發錯位置了, 版主有時間幫我轉移到“后臺數據庫編程”板塊~

top

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

top

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

top

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

top

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

top

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

top

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

說白了.生成的doc文件,其實還是一個html文件..

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

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

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

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


生成成xsl文件也是如此.

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

top

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

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

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

top

14# 發表于 2008-6-16 10:39 
自動化不夠高,思路不錯。

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

top

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

top

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

支持 原創的東西..

top

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

top

18# 發表于 2008-6-17 13:35 
真不錯,感謝樓主

top

19# 發表于 2008-6-18 16:40 
思路不錯。在一些不嚴格要求word或者excel格式的地方可以運用。

top

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

top

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

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

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

但是如果我把后綴.xls改成.csv就可以了,目前還沒找到原因
復制內容到剪貼板
代碼:
<%
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=系統出錯,請聯系管理員!' </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"  '為要寫入的文件取個文件名,后綴可以是txt,xls,這里我用csv,這種文件打開也是excel表
  set file = createobject("scripting.filesystemobject")
  application.lock
  '寫入文件的存放路徑,一定要開放這個路徑下的讀寫權限
  filepath=server.mappath(ttxt)
  set writefile = file.createtextfile(filepath,true)
  '在表格中寫入第一行,字段描述,這個根據你實際的數據表字段來寫
  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
  '以上三行作用是逐行將數據寫入表中
  writefile.close
  application.unlock
  rs.close
  set rs=nothing
end if
rs.close
set rs=nothing
response.write "數據導出成功!"
response.end
%>

top

22# 發表于 2008-6-18 18:16 
不錯. .謝謝 樓主
<阿龍> donaldsu.cn

top

23# 發表于 2008-6-18 20:39 
謝謝大家的支持,其實我主要告訴大家的是借用模板來生成而非告訴大家用fso或adodb.stream可以生成excel(因為很多人已經知道fso或adodb.stream能生成excel或其他文本)
用fso或adodb.stream很久之前可以實現了,就想我剛開始做一樣,也寫了很多很多的代碼,維護起來也不方便。
復制內容到剪貼板
代碼:
<%
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&">車牌號</td><td width=150 "&titlestyle&">車架號</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背景變成了全白色,只有表格地方才顯示邊框,不符合我們的要求。
另外一種方法,背景及空白單元格顯示正常,但也是懶得去寫代碼
復制內容到剪貼板
代碼:
……
excelcenter="id" & vbtab & "username" & vbtab &"password" & vbtab& "works" &vblf&_
            "12" & vbtab & "小王" & vbtab &"123456" & vbtab& "網頁設計"
             ……
xslfile.writeline(excelcenter)
……
樓上這位和12#都說并非是真正意義上的excel,哈哈,我也不是很懂,希望有空能給我和大家解釋一下“真正意義上的excel”是什么一種概念
在此也希望大家能找到其他更好的辦法。

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

top

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

top

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

fso生成excel,沒有樣式,樓主的思路贊!
加入標準化

top

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

top

27# 發表于 2010-6-23 13:42 
好厲害 謝謝樓樓
馬上去試試效果
可以直接導出報表了~~

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