ASP.NET中資料庫資料匯入Excel並列印(1)

來源:互聯網
上載者:User
asp.net|excel|列印|資料|資料庫 眾所周知,WEB上的列印是比較困難的,常見的WEB上列印的方法大概有三種:
  
    1、直接利用IE的列印功能。一般來說,這種方法可以做些擴充,而不是單單的調用javascript:print()這樣簡單,比如,可以使用如下代碼:
  
  <OBJECT
  id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0>
  </OBJECT>
  <input
  type=button value=列印 onclick=document.all.WebBrowser.ExecWB(6,1)>
  <input
  type=button value=直接列印 onclick=document.all.WebBrowser.ExecWB(6,6)>
  <input
  type=button value=版面設定 onclick=document.all.WebBrowser.ExecWB(8,1)>
  <input
  type=button value=預覽列印 onclick=document.all.WebBrowser.ExecWB(7,1)>
  
    這種方法可以適用於簡單的資料列印,對系統要求不高,但不足之處在於可以控制的能力比較差,比如處理分頁等問題。
  
    2、利用水晶報表或其他第三方工具,如微軟的Reporting service。水晶報表或其他第三方控制項的列印,一般是匯出到Excel,WORD,PDF等再進行列印的,效果比較好,但編程比較複雜,控制起來也不大方便,而且這些工具都是要收費的。
  
    3、將資料庫的資料或要列印的內容匯出到Excel,Word中去列印。使用這種方法,可以在服務端或者用戶端進行。在服務端使用的話,要求服務端要安裝Word,Excel,在用戶端使用的話,要求用戶端在IE的安全設定上有一定要求。使用這種方法,可適應性比較強,控制較好。本文將以在ASP.NET中使用Excel為例子,介紹如何將資料匯出到Excel的幾種方法。
  
    首先,先介紹在服務端使用Excel的方法。要在伺服器端使用Excel,必須要求伺服器端安裝Excel,並且要求一定的存取權限。比如,需要添加<identity impersonate="true"/>到web.config中。在本文中,要給予WEB目錄可寫的許可權。
  
    接下來,使用VS.NET 2003建立一個VB.NET的工程,並添加引用。由於我們要使用的是Excel,所以添加一個關於COM的應用,這裡添加的是Microsoft Excel Object Library,之後,添加的代碼如下:
  
  Imports System.Runtime.InteropServices.Marshal
  Imports Office
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   '以COM方式處理Excel
   Dim oExcel As New Excel.Application
   Dim oBooks As Excel.Workbooks, oBook As Excel.Workbook
   Dim oSheets As Excel.Sheets, oSheet As Excel.Worksheet
   Dim oCells As Excel.Range
   Dim sFile As String, sTemplate As String
   '定義一個datatable
   Dim dt As DataTable = CType(Application.Item("MyDataTable"), DataTable)
  
   sFile = Server.MapPath(Request.ApplicationPath) & "\MyExcel.xls"
   '定義模版檔案
   sTemplate = Server.MapPath(Request.ApplicationPath) & "\MyTemplate.xls"
   oExcel.Visible = False
   oExcel.DisplayAlerts = False
   '定義一個新的活頁簿
   oBooks = oExcel.Workbooks
   oBooks.Open(Server.MapPath(Request.ApplicationPath) & "\MyTemplate.xls") oBook = oBooks.Item(1)
   oSheets = oBook.Worksheets
   oSheet = CType(oSheets.Item(1), Excel.Worksheet)
  
   '命名該sheet
   oSheet.Name = "First Sheet"
   oCells = oSheet.Cells
   '調用dumpdata過程,將資料匯入到Excel中去
   DumpData(dt, oCells)
   '儲存
   oSheet.SaveAs(sFile)
   oBook.Close()
  
   '退出Excel,並且釋放調用的COM資源
   oExcel.Quit()
   ReleaseComObject(oCells) : ReleaseComObject(oSheet)
   ReleaseComObject(oSheets) : ReleaseComObject(oBook)
   ReleaseComObject(oBooks) : ReleaseComObject(oExcel)
   oExcel = Nothing : oBooks = Nothing : oBook = Nothing
   oSheets = Nothing : oSheet = Nothing : oCells = Nothing
   System.GC.Collect()
   Response.Redirect(sFile)
  End Sub
  
  '將DATATABLE的內容匯出到Excel的儲存格中去
  Private Function DumpData(ByVal dt As DataTable, ByVal oCells As Excel.Range) As String
   Dim dr As DataRow, ary() As Object
   Dim iRow As Integer, iCol As Integer
  
   '輸出資料行標題
   For iCol = 0 To dt.Columns.Count - 1
    oCells(2, iCol + 1) = dt.Columns(iCol).ToString
   Next
  
   '將資料匯出到相應的儲存格
   For iRow = 0 To dt.Rows.Count - 1
    dr = dt.Rows.Item(iRow)
    ary = dr.ItemArray
    For iCol = 0 To UBound(ary)
     oCells(iRow + 3, iCol + 1) = ary(iCol).ToString
     Response.Write(ary(iCol).ToString & vbTab)
    Next
   Next
  End Function
  End Class
  
    在上面的代碼中,首先,先定義了一些關於Excel的對象,如application,workbook,sheets,sheet等,這些都是在使用Excel的COM對象時,必不可少的。之後,我們事先先定義了一個Excel的模版檔案,並且用Excel先開啟這個模版檔案,再調用一個自訂的過程dumpdata。在這個自訂的過程中,將datatable中的資料,逐一匯入到Excel的儲存格中去。讀者自己可以慢慢體會下,上面的代碼中,是如何將datatable中的資料匯出到Excel中去的。程式運行後,可以在當前的工作目錄下,產生名為myExcel.xls的Excel檔案,如下圖:
  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.