ASP向Excel導資料(圖)終結版ASP操作Excel,需要的朋友可以參考下。相信有很多人有用程式向Excel導數據的需求, 且做過. 一般導出一些文本數據是很方便的, 可選方法很多, 比如拼接文本字符串存.cvs格式(以逗號與回車符分隔數據,預設用Excel打開), 例如把xls檔案當成資料用SQL來操作等等. 當需要匯出圖片資料的時候該怎麼辦? 這就需要使用Excel.Application物件.
實際上用Excel.Application可以做到OfficeExcel軟體所能做到的全部操作, 功能相當強大. 但我們每個人學習精力有限, 不可能每個都對它很熟悉. 於是乎, 我選用了大量的關鍵字在百度與Google上搜尋, 希望能得到一些有價值的東西. 但找來找去, 沒發現一篇是完整版, 大多數是詢問的, 而且代碼中包含諸多的明顯錯誤與功能上的缺性. 值得批評的是,大量站點直接複製他人站點文章, 而且還是劣質文章. 誒, 不找也罷! 佛曰我不下地獄誰下地獄, 於是我給大家把這個工作給做了.
我先找了個VBA的手冊合集, 還好它是chm格式. 打開其中的Vbaexcelxl10.chm, 嗯, 不錯不錯, 確實是一個不錯的手冊, 但是, 它不是一個教程, 欲哭無淚… 沒辦法, 只好硬頭皮看下去. 手冊畢竟是手冊, 不會一把些細節上的便捷操作提出來, 也不會把各部分內容的邏輯關聯講得很完整. 經過我仔細的分析,大膽的預測, 周密的思考, 大量的試驗, 上刀山,下火鍋, 不對,是火海, 好不容易才把它完美的實現了. 現在, 又把它連夜傳到Web630.Net上, 僅僅只是希望大家記住這個站點, 同時希望各技術站多點原創文章, 為中國的程序業發展做點貢獻.
複製代碼代碼如下:
<%
Rem 初始化ExcelApplication的工作環境
Dim ExcelApp,eBook,eSheet
Set ExcelApp = CreateObject(Excel.Application) '建立Excel對象
ExcelApp.DisplayAlerts=false '不顯示警告
ExcelApp.Application.Visible=false '不顯示介面
Rem 初始化Excel數據
'ExcelApp.Workbooks.Open(Server.MapPath(zzz.xls)) '開啟Excel工作本,可替換下面一行
Set eBook=ExcelApp.Workbooks.Add '新建Excel工作本
Set eBook=ExcelApp.Workbooks(1) '引用第一個工作本
set eSheet = eBook.Worksheets(1) '引用第一個工作表
Rem 資料導入
Dim i,img
i = 1
For i=1 To 5
eSheet.Cells(i,1).Value=字段一&i
eSheet.Cells(i,2).Value=字段二&i
eSheet.Cells(i,3).Value=字段三&i
eSheet.Cells(i,4).Select '選擇第i行第4個單元格
Set img=eSheet.Pictures.Insert(Server.MapPath(people.jpg)) '在上述位置插入圖片,並得到圖片的引用
img.Top=img.Top+2 '調整圖片位置,下同, 否則它會壓住表格邊線
img.Left=img.Left+2 '單位是磅
eSheet.Rows(i).RowHeight=img.Height+4 '調整目前行的高度,讓它自動與圖片高度相同
Next
Rem 保存上述所做的工作
'eBook.Save '如果是開啟已經存在的Excel檔案,則可選用這行來取代下面一行
eBook.SaveAs Server.MapPath(zzz.xls)
Set eSheet=Nothing
Set eBook=Nothing
'ExcelApp.Quit '一定要退出, 否則Excel的進程留在作業系統中.
set ExcelApp = Nothing
%>
ASP向Exce讀取或寫入資料時, 比較簡潔的一種方法是把Excel當作資料庫使用SQL語句來操作. 網路上很多地方都有相關的文章, 本文僅作為《ASP向Excel導資料(圖)終結版》的輔助資料給大家參考.
複製代碼代碼如下:
<%
Dim conn,rs,sql
Sub DBOpen()
Dim db : db=Server.MapPath(zzz.xls)
Set conn=Server.CreateObject(Adodb.Connection)
On Error Resume Next
conn.Open Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;HDR=YES;Data Source= & db
Rem HDR 預設為YES,表示第一行作為欄位名稱, 否則視它為內容
Rem 對於Excel2007,而應為: Provider=Microsoft.ACE.OLEDB.12.0; Extended Properties=Excel 12.0;Data Source=xxx.xlsx;
If Err.Number<>0 then
Err.Clear
Response.Write(<h1>The Database link is ERROR</h1>)
Response.End()
End If
On Error GoTo 0
End Sub
Sub DBClose()
If IsNotBlank(conn) Then
conn.Close()
Set conn=Nothing
End If
End Sub
Function IsNotBlank(ByRef TempVar)
IsBlank = True
Select Case VarType(TempVar)
Case 0,1 'Empty & Null
IsBlank = False
Case 9 'Object
If TypeName(TempVar) = Nothing Or TypeName(TempVar) = Empty Then
IsBlank = False
End If
End Select
End Function
Call DBOpen()
sql=SELECT * FROM [Sheet1$] '注意表名的寫法, 需要在工作表名的後面加符號$
Set rs=conn.Execute(sql)
While Not rs.Eof
Response.Write(rs(0)&, )
Response.Write(rs(1)&, )
Response.Write(rs(2)&<br />&VbCrLf)
rs.Movenext
Wend
rs.Close : Set rs=Nothing
Call DBClose()
%>