飛艷小屋

          程序--人生--哲學___________________歡迎艷兒的加入

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks
          ASP導出Excel數據的四種方法

          摘自:西部asp聯盟                   人氣:17370

          一、使用OWC
            什么是OWC?
            OWC是Office Web Compent的縮寫,即Microsoft的Office Web組件,它為在Web中繪制圖形提供了靈活的同時也是最基本的機制。在一個intranet環境中,如果可以假設客戶機上存在特定的瀏覽器和一些功能強大的軟件(如IE5和Office 2000),那么就有能力利用Office Web組件提供一個交互式圖形開發環境。這種模式下,客戶端工作站將在整個任務中分擔很大的比重。
          <%
          Option Explicit
          Class ExcelGen
          Private objSpreadsheet
          Private iColOffset
          Private iRowOffset


          Sub Class_Initialize()
          Set objSpreadsheet = Server.CreateObject("OWC.Spreadsheet")
          iRowOffset = 2
          iColOffset = 2
          End Sub


          Sub Class_Terminate()
          Set objSpreadsheet = Nothing "Clean up
          End Sub


          Public Property Let ColumnOffset(iColOff)
          If iColOff > 0 then
          iColOffset = iColOff
          Else
          iColOffset = 2
          End If
          End Property


          Public Property Let RowOffset(iRowOff)
          If iRowOff > 0 then
          iRowOffset = iRowOff
          Else
          iRowOffset = 2
          End If
          End Property Sub GenerateWorksheet(objRS)
          "Populates the Excel worksheet based on a Recordset"s contents
          "Start by displaying the titles
          If objRS.EOF then Exit Sub
          Dim objField, iCol, iRow
          iCol = iColOffset
          iRow = iRowOffset
          For Each objField in objRS.Fields
          objSpreadsheet.Cells(iRow, iCol).Value = objField.Name
          objSpreadsheet.Columns(iCol).AutoFitColumns
          "設置Excel表里的字體
          objSpreadsheet.Cells(iRow, iCol).Font.Bold = True
          objSpreadsheet.Cells(iRow, iCol).Font.Italic = False
          objSpreadsheet.Cells(iRow, iCol).Font.Size = 10
          objSpreadsheet.Cells(iRow, iCol).Halignment = 2 "居中
          iCol = iCol + 1
          Next "objField
          "Display all of the data
          Do While Not objRS.EOF
          iRow = iRow + 1
          iCol = iColOffset
          For Each objField in objRS.Fields
          If IsNull(objField.Value) then
          objSpreadsheet.Cells(iRow, iCol).Value = ""
          Else
          objSpreadsheet.Cells(iRow, iCol).Value = objField.Value
          objSpreadsheet.Columns(iCol).AutoFitColumns
          objSpreadsheet.Cells(iRow, iCol).Font.Bold = False
          objSpreadsheet.Cells(iRow, iCol).Font.Italic = False
          objSpreadsheet.Cells(iRow, iCol).Font.Size = 10
          End If
          iCol = iCol + 1
          Next "objField
          objRS.MoveNext
          Loop
          End Sub Function SaveWorksheet(strFileName)


          "Save the worksheet to a specified filename
          On Error Resume Next
          Call objSpreadsheet.ActiveSheet.Export(strFileName, 0)
          SaveWorksheet = (Err.Number = 0)
          End Function
          End Class


          Dim objRS
          Set objRS = Server.CreateObject("ADODB.Recordset")
          objRS.Open "SELECT * FROM xxxx", "Provider=SQLOLEDB.1;Persist Security


          Info=True;User ID=xxxx;Password=xxxx;Initial Catalog=xxxx;Data source=xxxx;"
          Dim SaveName
          SaveName = Request.Cookies("savename")("name")
          Dim objExcel
          Dim ExcelPath
          ExcelPath = "Excel\" & SaveName & ".xls"
          Set objExcel = New ExcelGen
          objExcel.RowOffset = 1
          objExcel.ColumnOffset = 1
          objExcel.GenerateWorksheet(objRS)
          If objExcel.SaveWorksheet(Server.MapPath(ExcelPath)) then
          "Response.Write "<html><body bgcolor="gainsboro" text="#000000">已保存為Excel文件.


          <a href="" & server.URLEncode(ExcelPath) & "">下載</a>"
          Else
          Response.Write "在保存過程中有錯誤!"
          End If
          Set objExcel = Nothing
          objRS.Close
          Set objRS = Nothing
          %> 


          二、用Excel的Application組件在客戶端導出到Excel或Word
            
          注意:兩個函數中的“data“是網頁中要導出的table的 id


          <input type="hidden" name="out_word" onclick="vbscript:buildDoc" value="導出到word" class="notPrint">
          <input type="hidden" name="out_excel" onclick="AutomateExcel();" value="導出到excel" class="notPrint"> 


          導出到Excel代碼
          <SCRIPT LANGUAGE="javascript">
          <!--
          function AutomateExcel()
          {
          // Start Excel and get Application object.
          var oXL = new ActiveXObject("Excel.Application");
          // Get a new workbook.
          var oWB = oXL.Workbooks.Add();
          var oSheet = oWB.ActiveSheet;
          var table = document.all.data;
          var hang = table.rows.length;
          var lie = table.rows(0).cells.length;


          // Add table headers going cell by cell.
          for (i=0;i<hang;i++)
          {
          for (j=0;j<lie;j++)
          {
          oSheet.Cells(i+1,j+1).value = table.rows(i).cells(j).innerText;
          }
          }
          oXL.Visible = true;
          oXL.UserControl = true;
          }
          //-->
          </SCRIPT> 


          導出到Word代碼
          <script language="vbscript">
          Sub buildDoc
          set table = document.all.data
          row = table.rows.length
          column = table.rows(1).cells.length
          Set objWordDoc = CreateObject("Word.Document")
          objWordDoc.Application.Documents.Add theTemplate, False
          objWordDoc.Application.Visible=True
          Dim theArray(20,10000)
          for i=0 to row-1
          for j=0 to column-1
          theArray(j+1,i+1) = table.rows(i).cells(j).innerTEXT
          next
          next
          objWordDoc.Application.ActiveDocument.Paragraphs.Add.Range.InsertBefore("綜合查詢結果集") //顯示表格標題


          objWordDoc.Application.ActiveDocument.Paragraphs.Add.Range.InsertBefore("")
          Set rngPara = objWordDoc.Application.ActiveDocument.Paragraphs(1).Range
          With rngPara
          .Bold = True //將標題設為粗體
          .ParagraphFormat.Alignment = 1 //將標題居中
          .Font.Name = "隸書" //設定標題字體
          .Font.Size = 18 //設定標題字體大小
          End With
          Set rngCurrent = objWordDoc.Application.ActiveDocument.Paragraphs(3).Range
          Set tabCurrent = ObjWordDoc.Application.ActiveDocument.Tables.Add(rngCurrent,row,column)


          for i = 1 to column


          objWordDoc.Application.ActiveDocument.Tables(1).Rows(1).Cells(i).Range.InsertAfter theArray(i,1)
          objWordDoc.Application.ActiveDocument.Tables(1).Rows(1).Cells(i).Range.ParagraphFormat.alignment=1
          next
          For i =1 to column
          For j = 2 to row
          objWordDoc.Application.ActiveDocument.Tables(1).Rows(j).Cells(i).Range.InsertAfter theArray(i,j)
          objWordDoc.Application.ActiveDocument.Tables(1).Rows(j).Cells(i).Range.ParagraphFormat.alignment=1
          Next
          Next
          End Sub
          </SCRIPT> 


          三、直接在IE中打開,再存為EXCEL文件


            把讀出的數據用<table>格式,在網頁中顯示出來,同時,加上下一句即可把EXCEL表在客客戶端顯示。
          <%response.ContentType ="application/vnd.ms-excel"%> 
            注意:顯示的頁面中,只把<table>輸出,最好不要輸出其他表格以外的信息。


          四、導出以半角逗號隔開的csv
            用fso方法生成文本文件的方法,生成一個擴展名為csv文件。此文件,一行即為數據表的一行。生成數據表字段用半角逗號隔開。(有關fso生成文本文件的方法,在此就不做介紹了)
            CSV文件介紹 (逗號分隔文件)
            選擇該項系統將創建一個可供下載的CSV 文件; CSV是最通用的一種文件格式,它可以非常容易地被導入各種PC表格及數據庫中。
            請注意即使選擇表格作為輸出格式,仍然可以將結果下載CSV文件。在表格輸出屏幕的底部,顯示有 "CSV 文件"選項,點擊它即可下載該文件。
            如果您把瀏覽器配置為將您的電子表格軟件與文本(TXT)/逗號分隔文件(CSV) 相關聯,當您下載該文件時,該文件將自動打開。下載下來后,如果本地已安裝EXCEL,點擊此文件,即可自動用EXCEL軟件打開此文件。

          posted on 2005-12-06 14:43 天外飛仙 閱讀(297) 評論(0)  編輯  收藏 所屬分類: .net
          主站蜘蛛池模板: 商洛市| 教育| 辽中县| 江北区| 德州市| 仙居县| 南皮县| 襄城县| 左权县| 简阳市| 江达县| 岢岚县| 赤城县| 宁化县| 五大连池市| 孝义市| 四会市| 微山县| 奉化市| 安吉县| 家居| 旬邑县| 双牌县| 鄂托克前旗| 全椒县| 博乐市| 宁南县| 阿荣旗| 吉首市| 克拉玛依市| 南溪县| 浦江县| 通城县| 墨竹工卡县| 岑溪市| 大姚县| 高雄市| 盘山县| 繁峙县| 北辰区| 安康市|