[轉(zhuǎn)帖]如何用asp讀取Excel文件
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
:如何用asp讀取Excel文件 如何用asp讀取Excel文件https://www.cnblogs.com/athrun/articles/1036454.html1.ASP對(duì)Excel的基本操作 2 讀取Excel文件的實(shí)例
<% set xlApp = server.createObject("Excel.Application") strsource = server.MapPath("xl.xls") set xlbook = xlApp.WorkBooks.Open(strsource) set xlsheet = xlbook.Worksheets(1) i = 1 response.write "<table>" while xlsheet.cells(i,1) <> "" response.write "<tr>" response.write "<td>" & xlsheet.Cells(i,1) & "</td>" response.write "<td>" & xlsheet.Cells(i,2) & "</td>" response.write "<td>" & xlsheet.Cells(i,3) & "</td>" response.write "<tr>" i = i + 1 wend response.write "</table>" set xlsheet = nothing set xlbook = nothing xlApp.quit '千萬(wàn)記住要加這一句,否則每運(yùn)行一次你的機(jī)器里就增加一個(gè)Excel進(jìn)程,而且無(wú)法釋放 'set xlApp = nothing 是不行的 %> ================================================================
3. 怎樣將數(shù)據(jù)從Excel導(dǎo)入到SQL Server中
(1)
<% sub dataIntoSqlServer_ceritificate(strFileName,strSheetName,myConn) '定義 dim myConnection dim strName dim rsXsl,rsSql dim myConn_Xsl dim cmd dim i,j dim maxId strName = strFileName set myConnection = Server.createObject("ADODB.Connection") set rsXsl = Server.createObject("ADODB.Recordset") set rsSql = Server.createObject("ADODB.Recordset") set cmd = server.createObject("ADODB.Command") cmd.ActiveConnection = myConn myConn_Xsl = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strName & _ ";Extended Properties=Excel 8.0" '打開(kāi)連接 myconnection.open myConn_Xsl '打開(kāi)表 str_Xsl = "select * from [" & strSheetName & "$]" rsXsl.open str_Xsl,myconnection,1,1 j = 1 Do while not rsXsl.eof '取出最大值 str_sql = "select Max(id) as maxId from exceltosql" rsSql.open str_Sql,myConn,1,3 if Not rsSql.eof then if not isNull(rsSql("maxId")) then maxId=CLng(rsSql("maxId")) + 1 else maxId = 1 end if else maxId = 1 end if rsSql.close '//關(guān)閉對(duì)象 '加入數(shù)據(jù)庫(kù) str_Sql = "insert into exceltosql values(" & maxId&",'"&rsXsl(1)&"','" & rsXsl(2)&"')" cmd.CommandText = str_Sql cmd.Excute() '''''''''''''''''''''''''''''''''''''''''' j = j + 1 rsXsl.moveNext loop response.write "共導(dǎo)入 " & j_1 & " 條記錄.<br>" response.write "<a href=# onclick='self.close();'>關(guān)閉窗口</a>" set rsXsl = nothing set rsSql = nothing set myconnection = nothing set cmd = nothing end sub (2) '調(diào)用方法 <% file1 = "c:excelexample.xls" myconn = "DRIVER={SQL SERVER};SERVER=(local);uid=sa;pwd=sa;DATABASE=aspbook" dataIntoSqlServer_ceritificate file1,"sheet1",myconn %> ======================================================== 4.ASP操作Excel技術(shù)總結(jié) 目錄 一、 環(huán)境配置 二、 ASP對(duì)Excel的基本操作 三、 ASP操作Excel生成數(shù)據(jù)表 四、 ASP操作Excel生成Chart圖 五、 服務(wù)器端Excel文件瀏覽、下載、刪除方案 六、 附錄 正文 一、 環(huán)境配置 服務(wù)器端的環(huán)境配置從參考資料上看,微軟系列的配置應(yīng)該都行,即: 1.Win9x+PWS+Office 2.Win2000 Professional+PWS+Office 3.Win2000 Server+IIS+Office 目前筆者測(cè)試成功的環(huán)境是后二者。Office的版本沒(méi)有特殊要求,考慮到客戶(hù)機(jī)配置的不確定性和下兼容特性,建議服務(wù)器端Office版本不要太高,以防止客戶(hù)機(jī)下載后無(wú)法正確顯示。 服務(wù)器端環(huán)境配置還有兩個(gè)偶然的發(fā)現(xiàn)是: 1. 筆者開(kāi)發(fā)機(jī)器上原來(lái)裝有金山的WPS2002,結(jié)果Excel對(duì)象創(chuàng)建始終出現(xiàn)問(wèn)題,卸載WPS2002后,錯(cuò)誤消失。 2. 筆者開(kāi)發(fā)ASP代碼喜歡用FrontPage,結(jié)果發(fā)現(xiàn)如果FrontPage打開(kāi)(服務(wù)器端),對(duì)象創(chuàng)建出現(xiàn)不穩(wěn)定現(xiàn)象,時(shí)而成功時(shí)而不成功。擴(kuò)展考察后發(fā)現(xiàn),Office系列的軟件如果在服務(wù)器端運(yùn)行,則Excel對(duì)象的創(chuàng)建很難成功。 服務(wù)器端還必須要設(shè)置的一點(diǎn)是COM組件的操作權(quán)限。在命令行鍵入“DCOMCNFG”,則進(jìn)入COM組件配置界面,選擇Microsoft Excel后點(diǎn)擊屬性按鈕,將三個(gè)單選項(xiàng)一律選擇自定義,編輯中將Everyone加入所有權(quán)限。保存完畢后重新啟動(dòng)服務(wù)器。 客戶(hù)端的環(huán)境配置沒(méi)發(fā)現(xiàn)什么特別講究的地方,只要裝有Office和IE即可,版本通用的好象都可以。 二、 ASP對(duì)Excel的基本操作 1、 建立Excel對(duì)象 set objExcelApp = createObject("Excel.Application") objExcelApp.DisplayAlerts = false 不顯示警告 objExcelApp.Application.Visible = false 不顯示界面 2、 新建Excel文件 objExcelApp.WorkBooks.add set objExcelBook = objExcelApp.ActiveWorkBook set objExcelSheets = objExcelBook.Worksheets set objExcelSheet = objExcelBook.Sheets(1) 3、 讀取已有Excel文件 strAddr = Server.MapPath(".") objExcelApp.WorkBooks.Open(strAddr & "TempletTable.xls") set objExcelBook = objExcelApp.ActiveWorkBook set objExcelSheets = objExcelBook.Worksheets set objExcelSheet = objExcelBook.Sheets(1) 4、 另存Excel文件 objExcelBook.SaveAs strAddr & "TempTable.xls" 5、 保存Excel文件 objExcelBook.Save (筆者測(cè)試時(shí)保存成功,頁(yè)面報(bào)錯(cuò)。) 6、 退出Excel操作 objExcelApp.Quit 一定要退出 set objExcelApp = Nothing 三、 ASP操作Excel生成數(shù)據(jù)表 1、 在一個(gè)范圍內(nèi)插入數(shù)據(jù) objExcelSheet.Range("B3:k3").Value = Array("67", "87", "5", "9", "7", "45", "45", "54", "54", "10") 2、 在一個(gè)單元格內(nèi)插入數(shù)據(jù) objExcelSheet.Cells(3,1).Value="Internet Explorer" 3、 選中一個(gè)范圍 4、 單元格左邊畫(huà)粗線條 5、 單元格右邊畫(huà)粗線條 6、 單元格上邊畫(huà)粗線條 7、 單元格下邊畫(huà)粗線條 8、 單元格設(shè)定背景色 9、 合并單元格 10、 插入行 11、 插入列 四、 ASP操作Excel生成Chart圖 1、 創(chuàng)建Chart圖 objExcelApp.Charts.Add 2、 設(shè)定Chart圖種類(lèi) objExcelApp.ActiveChart.ChartType = 97 注:二維折線圖,4;二維餅圖,5;二維柱形圖,51 3、 設(shè)定Chart圖標(biāo)題 objExcelApp.ActiveChart.HasTitle = True objExcelApp.ActiveChart.ChartTitle.Text = "A test Chart" 4、 通過(guò)表格數(shù)據(jù)設(shè)定圖形 objExcelApp.ActiveChart.SetSourceData objExcelSheet.Range("A1:k5"),1 5、 直接設(shè)定圖形數(shù)據(jù)(推薦) objExcelApp.ActiveChart.SeriesCollection.NewSeries objExcelApp.ActiveChart.SeriesCollection(1).Name = "=""333""" objExcelApp.ActiveChart.SeriesCollection(1).Values = "={1,4,5,6,2}" 6、 綁定Chart圖 objExcelApp.ActiveChart.Location 1 7、 顯示數(shù)據(jù)表 objExcelApp.ActiveChart.HasDataTable = True 8、 顯示圖例 objExcelApp.ActiveChart.DataTable.ShowLegendKey = True 五、 服務(wù)器端Excel文件瀏覽、下載、刪除方案 瀏覽的解決方法很多,“Location.href=”,“Navigate”,“Response.Redirect”都可以實(shí)現(xiàn),建議用客戶(hù)端的方法,原因是給服務(wù)器更多的時(shí)間生成Excel文件。 下載的實(shí)現(xiàn)要麻煩一些。用網(wǎng)上現(xiàn)成的服務(wù)器端下載組件或自己定制開(kāi)發(fā)一個(gè)組件是比較好的方案。另外一種方法是在客戶(hù)端操作Excel組件,由客戶(hù)端操作服務(wù)器端Excel文件另存至客戶(hù)端。這種方法要求客戶(hù)端開(kāi)放不安全ActiveX控件的操作權(quán)限,考慮到通知每個(gè)客戶(hù)將服務(wù)器設(shè)置為可信站點(diǎn)的麻煩程度建議還是用第一個(gè)方法比較省事。 刪除方案由三部分組成: A: 同一用戶(hù)生成的Excel文件用同一個(gè)文件名,文件名可用用戶(hù)ID號(hào)或SessionID號(hào)等可確信不重復(fù)字符串組成。這樣新文件生成時(shí)自動(dòng)覆蓋上一文件。 B: 在Global.asa文件中設(shè)置Session_onEnd事件激發(fā)時(shí),刪除這個(gè)用戶(hù)的Excel暫存文件。 C: 在Global.asa文件中設(shè)置Application_onStart事件激發(fā)時(shí),刪除暫存目錄下的所有文件。 注:建議目錄結(jié)構(gòu) Src 代碼目錄 Templet 模板目錄 Temp 暫存目錄 六、 附錄 出錯(cuò)時(shí)Excel出現(xiàn)的死進(jìn)程出現(xiàn)是一件很頭疼的事情。在每個(gè)文件前加上“On Error Resume Next”將有助于改善這種情況,因?yàn)樗鼤?huì)不管文件是否產(chǎn)生錯(cuò)誤都堅(jiān)持執(zhí)行到“Application.Quit”,保證每次程序執(zhí)行完不留下死進(jìn)程。 5.ASP讀EXCEL2000的文章??!
<% '=====================ASP讀取EXCEL注事項(xiàng)=========================== 'i)將Excel97或Excel2000生成的XLS文件(book)看成一個(gè)數(shù)據(jù)庫(kù),其中的每一個(gè)工作表(sheet)看成數(shù)據(jù)庫(kù)表 'ii)ADO假設(shè)Excel中的第一行為字段名.所以你定義的范圍中必須要包括第一行的內(nèi)容 'iii)Excel中的行標(biāo)題(即字段名)不能夠包含數(shù)字. Excel的驅(qū)動(dòng)在遇到這種問(wèn)題時(shí)就會(huì)出錯(cuò)的。例如你的行標(biāo)題名為“F1” 'iiii)如果你的Excel電子表格中某一列同時(shí)包含了文本和數(shù)字的話,那么Excel的ODBC驅(qū)動(dòng)將不能夠正常, 處理這一行的數(shù)據(jù)類(lèi)型,你必須要保證該列的數(shù)據(jù)類(lèi)型一致 Dim Conn,Driver,DBPath,Rs ' 建立Connection對(duì)象 Set Conn = Server.createObject("ADODB.Connection") Driver = "Driver={Microsoft Excel Driver (*.xls)};" DBPath = "DBQ=" & Server.MapPath( "test.xls" ) '調(diào)用Open 方法打開(kāi)數(shù)據(jù)庫(kù) Conn.Open Driver & DBPath 'DSN連接方式 'Conn.Open "Dsn=test" '注意 表名一定要以下邊這種格試 "[表名$]" 書(shū)寫(xiě) Sql="select * from [Sheet1$] where 序號(hào)=0" Set Rs=Conn.execute(Sql) IF Rs.Eof And Rs.Bof Then Response.write "沒(méi)有找到您需要的數(shù)據(jù)!!" Else Do While Not Rs.EOF Response.write Rs("姓名") Rs.MoveNext Loop End IF Rs.Close Set Rs=nothing Conn.Close Set Conn=Nothing 'Response.Write "成功!" %> ======================================================== 6.ASP與電子表格EXCEL的交互操作
Here we go again with another sample for Excel, this time we will be using ASP to create a chart. You all asked me for it, now here is the solution. Thanks again for all your nice comments :) First we set the type of script <%@ LANGUAGE="VBscript" %> Make the object, and set the object to an Excelsheet Dim MyExcelChart Set MyExcelChart = createObject("Excel.Sheet") Now lets write the rest of the script, see the comments ' show or dont show excel to user, TRUE or FALSE MyExcelChart.Application.Visible = True ' populate the cells MyExcelChart.ActiveSheet.Range("B2:k2").Value = Array ("Week1", "Week2", "Week3", "Week4", "Week5", "Week6", "Week7", "Week8", "Week9", "Week10") MyExcelChart.ActiveSheet.Range("B3:k3").Value = Array ("67", "87", "5", "9", "7", "45", "45", "54", "54", "10") MyExcelChart.ActiveSheet.Range("B4:k4").Value = Array ("10", "10", "8", "27", "33", "37", "50", "54", "10", "10") MyExcelChart.ActiveSheet.Range("B5:k5").Value = Array ("23", "3", "86", "64", "60", "18", "5", "1", "36", "80") MyExcelChart.ActiveSheet.Cells(3,1).Value="Internet Explorer" MyExcelChart.ActiveSheet.Cells(4,1).Value="Netscape" MyExcelChart.ActiveSheet.Cells(5,1).Value="Other" ' select the contents that need to be in the chart MyExcelChart.ActiveSheet.Range("b2:k5").select ' Add the chart MyExcelChart.Charts.Add ' Format the chart, set type of chart, shape of the bars, show title, get the data for the chart, show datatable, show legend MyExcelChart.activechart.ChartType = 97 MyExcelChart.activechart.BarShape =3 MyExcelChart.activechart.HasTitle = True MyExcelChart.activechart.ChartTitle.Text = "Visitors log for each week shown in browsers percentage" MyExcelChart.activechart.SetSourceData MyExcelChart.Sheets("Sheet1").Range("A1:k5"),1 MyExcelChart.activechart.Location 1 MyExcelChart.activechart.HasDataTable = True MyExcelChart.activechart.DataTable.ShowLegendKey = True ' Save the the excelsheet to excelface MyExcelChart.SaveAs "c:chart.xls" %> Now lets complete the HTML tags. <HTML> <HEAD> <TITLE>MyExcelChart</TITLE> </HEAD> <BODY> </BODY> </HTML> This completes yer ASP page, look below for the complete code of myexcelchart.asp <%@ LANGUAGE="VBscript" %> <% ' create Object Set MyExcelChart = createObject("Excel.Sheet") ' show or dont show excel to user, TRUE or FALSE MyExcelChart.Application.Visible = True ' populate the cells MyExcelChart.ActiveSheet.Range("B2:k2").Value = Array ("Week1", "Week2", "Week3", "Week4", "Week5", "Week6", "Week7", "Week8", "Week9", "Week10") MyExcelChart.ActiveSheet.Range("B3:k3").Value = Array ("67", "87", "5", "9", "7", "45", "45", "54", "54", "10") MyExcelChart.ActiveSheet.Range("B4:k4").Value = Array ("10", "10", "8", "27", "33", "37", "50", "54", "10", "10") MyExcelChart.ActiveSheet.Range("B5:k5").Value = Array ("23", "3", "86", "64", "60", "18", "5", "1", "36", "80") MyExcelChart.ActiveSheet.Cells(3,1).Value="Internet Explorer" MyExcelChart.ActiveSheet.Cells(4,1).Value="Netscape" MyExcelChart.ActiveSheet.Cells(5,1).Value="Other" ' select the contents that need to be in the chart MyExcelChart.ActiveSheet.Range("b2:k5").select ' Add the chart MyExcelChart.Charts.Add ' Format the chart, set type of chart, shape of the bars, show title, get the data for the chart, show datatable, show legend MyExcelChart.activechart.ChartType = 97 MyExcelChart.activechart.BarShape =3 MyExcelChart.activechart.HasTitle = True MyExcelChart.activechart.ChartTitle.Text = "Visitors log for each week shown in browsers percentage" MyExcelChart.activechart.SetSourceData MyExcelChart.Sheets("Sheet1").Range("A1:k5"),1 MyExcelChart.activechart.Location 1 MyExcelChart.activechart.HasDataTable = True MyExcelChart.activechart.DataTable.ShowLegendKey = True ' Save the the excelsheet to chart.xls MyExcelChart.SaveAs "c:chart.xls" %> <HTML> <HEAD> <TITLE>MyExcelChart</TITLE> </HEAD> <BODY> </BODY> </HTML> ======================================================= 6.asp實(shí)現(xiàn)在web中顯示電子表格數(shù)據(jù)(一) 顯示數(shù)據(jù)表格的應(yīng)用 在用ASP語(yǔ)言開(kāi)發(fā)的Web數(shù)據(jù)庫(kù)應(yīng)用程序中,ADO (ActiveX Data Objects) 已經(jīng)成為非常流行的工具,而且對(duì)于真正的關(guān)系型數(shù)據(jù)庫(kù),比如Oracle、SQL Server,它都不會(huì)有局限性。ADO能夠存取多種不同的數(shù)據(jù)格式,MS Excel電子數(shù)據(jù)表格就是其中之一。 關(guān)于這個(gè)應(yīng)用 可供下載的例程代碼中包括一個(gè)ASP文件ReadX1.asp,一個(gè)Excel文件TheWorkbook.xls。你也可以另外加入一些電子數(shù)據(jù)表文件。 執(zhí)行ReadXl.asp頁(yè)面,將顯示出可用的電子數(shù)據(jù)表文件列表。選擇好一個(gè)文件,并提交表單后,你將會(huì)看到: 一個(gè)下拉菜單,其中是工作表名稱(chēng) 一個(gè)下拉菜單,其中是命名的范圍 一個(gè)單元格范圍輸入框 第一個(gè)工作表的全部?jī)?nèi)容 可以選擇工作簿文件中的另外一個(gè)工作表,或者輸入符合Excel格式的單元格范圍數(shù)值,比如:D20:E21 或者 Sheet3!F12:J22。注意:在ADO和ODBC驅(qū)動(dòng)程序中,要用$符合替換分界符號(hào)!。 實(shí)現(xiàn)步驟 現(xiàn)在對(duì)這個(gè)應(yīng)用程序已經(jīng)有了初步的認(rèn)識(shí),下面開(kāi)始討論ASP代碼,看看如何讀取電子數(shù)據(jù)表的數(shù)據(jù),如何找到電子數(shù)據(jù)簿 (workbook)文件中可用的電子數(shù)據(jù)表(worksheet)和范圍,并看看實(shí)現(xiàn)文件列表選擇的技術(shù)。這里假設(shè)你已經(jīng)熟悉了編寫(xiě)HTML表單的技術(shù),所以對(duì)此不做詳細(xì)介紹。 基本條件 下面將涉及到ADO對(duì)象、方法、屬性、收集和常量。在服務(wù)器上安裝IIS后,ADO就存在了,并且還有相關(guān)文檔,地址是http://YourServer/IisHelp/ado210.chm (版本2.1),或者h(yuǎn)ttp://YourServer/IisHelp/ado/docs/(老版本1.5)。如果需要升級(jí)ADO,可以從http://www.microsoft.com/Data/download.htm下載最新版本的MDAC工具包進(jìn)行安裝。 實(shí)現(xiàn)“文件列表選擇”使用到了內(nèi)建的VBscript腳本對(duì)象,相關(guān)文檔可以查看http://YourServer/IisHelp/vbscript/htm/vbstoc.htm,如果想查看最新的文檔,請(qǐng)?jiān)L問(wèn)http://msdn.microsoft.com/scripting (版本5)。當(dāng)然,在服務(wù)器端和客戶(hù)端,你都不需要安裝MS Excel。 讀取電子數(shù)據(jù)表(Worksheet)數(shù)據(jù) 通過(guò)ADO讀取電子數(shù)據(jù)表與讀取數(shù)據(jù)庫(kù)表的方法基本是一樣的。從下圖可以看到,電子數(shù)據(jù)表的行被稱(chēng)作記錄Records,列被稱(chēng)作字段Fields。電子數(shù)據(jù)表或者單元格的范圍可以被看成表Tables,并按照記錄集recordsets進(jìn)行存取。 Spreadsheet Database HTML < table > < tr > < th >NameA< /th > < th >NameB< /th > < th >NameC< /th > < /tr >< tr > < td >1< /td > < td >2< /td > < td >3< /td > < /tr >< tr > < td >11< /td > < td >12< /td > < td >13< /td > < /tr > < /table > 執(zhí)行下面的步驟,從數(shù)據(jù)庫(kù)表中讀取數(shù)據(jù)并顯示: 連接數(shù)據(jù)庫(kù)(同樣:打開(kāi)數(shù)據(jù)簿文件) 讀取記錄集recordset(同樣:讀取一定范圍的單元格) 循環(huán)每一個(gè)記錄(同樣:每一行),經(jīng)過(guò)格式化,顯示 建立ADO連接 在連接數(shù)據(jù)庫(kù)或者打開(kāi)文件前,需要了解一些信息。其中只要是設(shè)置名叫DSN的ODBC驅(qū)動(dòng),但為每一個(gè)數(shù)據(jù)表都建立這樣的ODBC驅(qū)動(dòng),是非常麻煩的,因?yàn)檫@需要在服務(wù)器的控制臺(tái)上通過(guò)“控制面板/ODBC設(shè)置”手工完成。 幸好,ASP提供了替代DSN的其他方法,它可以非常容易地在運(yùn)行時(shí)建立連接。比如,字符串“DRIVER={Microsoft Excel Driver?*.xls)};ReadOnly=1;DBQ=C:dirfile.xls",表示了替代DSN打開(kāi)文件c:dirfile.xls,因此通過(guò)這種方法僅僅需要提供給ASP程序一個(gè)文件名即可。執(zhí)行下面的代碼,將從表單中讀取文件名,然后轉(zhuǎn)換為全路徑,接著生成連接字符串,最后建立并打開(kāi)這個(gè)連接。 vXlFile = Request("XlBook") vXlFilePath = Server.MapPath(vXlFile) ' assumes file in current directory vConnString = "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;DBQ=" & _ vXlFilePath Set oConn = Server.createObject("ADODB.Connection") oConn.Open vConnString 如果想查看更多的非DSN連接信息,請(qǐng)打開(kāi)Windows或者NT System目錄下的幫助文件Odbcjet.hlp。 讀取記錄集 連接上電子數(shù)據(jù)簿文件后,讀取一定范圍的單元格數(shù)據(jù)就很簡(jiǎn)單了。盡管不是必須的,但還是建議:用符合“[” 和 “]”包含住單元格的范圍定義。只所以這么做,是以防在數(shù)據(jù)庫(kù)的操作中產(chǎn)生非法的符合。 vXlRange = Request("XlRange") Set oRs = oConn.execute("[" & vXlRange & "]") 執(zhí)行上面的語(yǔ)句,將返回記錄集對(duì)象,其中包括范圍內(nèi)單元格的所有可用信息, 記錄集的數(shù)值和描述數(shù)據(jù)的元數(shù)據(jù)。 該文章在 2023/11/28 9:45:40 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |