相信有很多人有用程序向Excel導(dǎo)數(shù)據(jù)的需求, 且做過(guò). 一般導(dǎo)出一些文本數(shù)據(jù)是很方便的, 可選方法很多, 比如拼接文本字符串存.cvs格式(以逗號(hào)與回車(chē)符分隔數(shù)據(jù),默認(rèn)用Excel打開(kāi)), 比如把xls文件當(dāng)成數(shù)據(jù)用SQL來(lái)操作 等等. 當(dāng)需要導(dǎo)出圖片數(shù)據(jù)的時(shí)候該怎么辦? 這就需要使用Excel.Application對(duì)象.
實(shí)際上用Excel.Application可以做到OfficeExcel軟件所能做到的全部操作, 功能相當(dāng)強(qiáng)大. 但我們每個(gè)人學(xué)習(xí)精力有限, 不可能每個(gè)都對(duì)它很熟悉. 于是乎, 我選用了大量的關(guān)鍵詞在百度與Google上搜索, 希望能得到一些有價(jià)值的東西. 但找來(lái)找去, 沒(méi)發(fā)現(xiàn)一篇是完整版, 大多數(shù)是詢(xún)問(wèn)的, 而且代碼中包含諸多的明顯錯(cuò)誤與功能上的缺性. 值得批評(píng)的是, 大量站點(diǎn)直接復(fù)制他人站點(diǎn)文章, 而且還是劣質(zhì)文章. 誒, 不找也罷! 佛曰 我不下地獄誰(shuí)下地獄, 于是我給大家把這個(gè)工作給做了.
我首先找了個(gè)VBA的手冊(cè)合集, 還好它是chm格式. 打開(kāi)其中的Vbaexcelxl10.chm, 嗯, 不錯(cuò)不錯(cuò), 確實(shí)是一個(gè)不錯(cuò)的手冊(cè), 但是, 它不是一個(gè)教程, 欲哭無(wú)淚… 沒(méi)辦法, 只好硬頭皮看下去. 手冊(cè)畢竟是手冊(cè), 不會(huì)一把些細(xì)節(jié)上的便捷操作提出來(lái), 也不會(huì)把各部分內(nèi)容的邏輯關(guān)聯(lián)講得很完整. 經(jīng)過(guò)我仔細(xì)的分析, 大膽的預(yù)測(cè), 周密的思考, 大量的試驗(yàn), 上刀山,下火鍋, 不對(duì),是火海, 好不容易才把它完美的實(shí)現(xiàn)了. 現(xiàn)在, 又把它連夜傳到Web630.Net上, 僅僅只是希望大家記住這個(gè)站點(diǎn), 同時(shí)希望各技術(shù)站多點(diǎn)原創(chuàng)文章, 為中國(guó)的程序業(yè)發(fā)展做點(diǎn)貢獻(xiàn).
復(fù)制代碼代碼如下:
<%
Rem 初始化ExcelApplication的工作環(huán)境
Dim ExcelApp,eBook,eSheet
Set ExcelApp = CreateObject(”Excel.Application”) ‘建立Excel對(duì)象
ExcelApp.DisplayAlerts=false ‘不顯示警告
ExcelApp.Application.Visible=false ‘不顯示界面
Rem 初始化Excel數(shù)據(jù)
‘ExcelApp.Workbooks.Open(Server.MapPath(”zzz.xls”)) ‘打開(kāi)Excel工作本,可替換下面一行
Set eBook=ExcelApp.Workbooks.Add ‘新建Excel工作本
Set eBook=ExcelApp.Workbooks(1) ‘引用第一個(gè)工作本
set eSheet = eBook.Worksheets(1) ‘引用第一個(gè)工作表
Rem 數(shù)據(jù)導(dǎo)入
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個(gè)單元單元格
Set img=eSheet.Pictures.Insert(Server.MapPath(”people.jpg”)) ‘在上述位置插入圖片,并得到圖片的引用
img.Top=img.Top+2 ‘調(diào)整圖片位置,下同, 否則它會(huì)壓住表格邊線
img.Left=img.Left+2 ‘單位是磅
eSheet.Rows(i).RowHeight=img.Height+4 ‘調(diào)整當(dāng)前行的高度,讓它自動(dòng)與圖片高度相同
Next
Rem 保存上述所做的工作
‘eBook.Save ‘如果是打開(kāi)已經(jīng)存在的Excel文件,則可選用這行來(lái)代替下面一行
eBook.SaveAs Server.MapPath(”zzz.xls”)
Set eSheet=Nothing
Set eBook=Nothing
‘ExcelApp.Quit ‘一定要退出, 否則Excel的進(jìn)程留在操作系統(tǒng)中.
set ExcelApp = Nothing
%>
ASP向Exce讀取或?qū)懭霐?shù)據(jù)時(shí), 比較簡(jiǎn)潔的一種方法是把Excel當(dāng)作數(shù)據(jù)庫(kù)使用SQL語(yǔ)句來(lái)操作. 網(wǎng)上很多地方都有相關(guān)的文章, 本文僅作為《ASP向Excel導(dǎo)數(shù)據(jù)(圖片)終結(jié)版》的輔助資料給大家參考.
復(fù)制代碼代碼如下:
<%
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 默認(rèn)為YES,表示第一行作為字段名, 否則視它為內(nèi)容
Rem 對(duì)于Excel2007,而應(yīng)為: “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$]” ‘注意表名的寫(xiě)法, 需要在工作表名的后面加符號(hào)$
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()
%>