close

Imports System.Data.SqlClient
Imports System.Text
Imports System.IO

'== for Excel file Export ==
Imports NPOI.HSSF.UserModel
Imports NPOI.HPSF
Imports NPOI.POIFS.FileSystem

Dim strSql As New StringBuilder, SqlCmd As SqlCommand, dr As SqlDataReader

Dim workbook As HSSFWorkbook = New HSSFWorkbook()
Dim ms As MemoryStream = New MemoryStream() '==需要 System.IO命名空間

'設定檔案摘要(原始檔案部份)
Dim dsi As NPOI.HPSF.DocumentSummaryInformation = NPOI.HPSF.PropertySetFactory.CreateDocumentSummaryInformation()
dsi.Company = "XXX公司"
workbook.DocumentSummaryInformation = dsi
'設定檔案摘要(說明部份)
Dim si As NPOI.HPSF.SummaryInformation = NPOI.HPSF.PropertySetFactory.CreateSummaryInformation()
si.Subject = "XXX報表"
workbook.SummaryInformation = si

'TITLE STYLE ----
Dim Font_Title As HSSFFont = workbook.CreateFont()
With Font_Title
      .Color = NPOI.HSSF.Util.HSSFColor.WHITE.index
      .FontName = HSSFFont.FONT_ARIAL
      .FontHeightInPoints = 10
      .Boldweight = NPOI.SS.UserModel.FontBoldWeight.BOLD
End With

Dim Style_Title As HSSFCellStyle = workbook.CreateCellStyle()
With Style_Title
      '儲存格網底顏色
      .FillForegroundColor = NPOI.HSSF.Util.HSSFColor.LIGHT_BLUE.index
      .FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND
      '儲存格框線
      .BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN
      .BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN
      .BorderRight = NPOI.SS.UserModel.BorderStyle.THIN
      .BorderTop = NPOI.SS.UserModel.BorderStyle.THIN
      .BottomBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index
      .LeftBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index
      .RightBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index
      .TopBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index
      .SetFont(Font_Title)
End With

'BODY STYLE ----
Dim Font_Body As HSSFFont = workbook.CreateFont()
With Font_Body
      .Color = NPOI.HSSF.Util.HSSFColor.BLACK.index
      .FontName = HSSFFont.FONT_ARIAL
      .FontHeightInPoints = 10
End With

Dim Style_Body As HSSFCellStyle = workbook.CreateCellStyle()
With Style_Body
      '儲存格網底顏色
      .FillForegroundColor = NPOI.HSSF.Util.HSSFColor.WHITE.index
      .FillPattern = NPOI.SS.UserModel.FillPatternType.SOLID_FOREGROUND
      '儲存格框線
      .BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN
      .BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN
      .BorderRight = NPOI.SS.UserModel.BorderStyle.THIN
      .BorderTop = NPOI.SS.UserModel.BorderStyle.THIN
      .BottomBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index
      .LeftBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index
      .RightBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index
      .TopBorderColor = NPOI.HSSF.Util.HSSFColor.BLACK.index
      .SetFont(Font_Body)
End With

'== 新增試算表 Sheet名稱。
Dim u_sheet1 As HSSFSheet = workbook.CreateSheet("表1")
Using cnSql As New SqlConnection(gstrConnDB)
      cnSql.Open()

      strSql.Length = 0
      strSql.AppendLine("Select distinct DATE,A,B,C ")
      strSql.AppendLine("From TABLE ")
      strSql.AppendLine("Where Substring(Deliver_Dt, 1, 6) = '" & gstrQryDate & "' ")
      strSql.AppendLine("Order by Deliver_Dt")
      SqlCmd = New SqlCommand(strSql.ToString, cnSql)
      dr = SqlCmd.ExecuteReader

      Dim HSRow As HSSFRow, HSCell As HSSFCell
      HSRow = u_sheet1.CreateRow(0)
      For i As Integer = 0 To 21
            HSCell = HSRow.CreateCell(i)

            Select Case i
                  Case "0"
                        HSCell.SetCellValue("日期")
                 Case "1"
                       HSCell.SetCellValue("AAA")
                 Case "2"
                       HSCell.SetCellValue("BBB")
                 Case "3"
                       HSCell.SetCellValue("CCC")
            End Select

            HSCell.CellStyle = Style_Title
      Next

      '== 利用迴圈,把資料寫入 Excel各個儲存格裡面。
      Dim k As Integer = 1
      While dr.Read()

            HSRow = u_sheet1.CreateRow(k)
            For i = 0 To (dr.FieldCount - 1)
                  HSCell = HSRow.CreateCell(i)
                  HSCell.SetCellValue(dr.GetValue(i).ToString())
                  HSCell.CellStyle = Style_Body
            Next

            k = k + 1

      End While

      SqlCmd.Cancel()
      dr.Close()

End Using

workbook.Write(ms)
ms.Flush()
ms.Position = 0
Dim myFile As System.IO.FileStream = System.IO.File.Open("D:\BOOK_" & gstrQryDate & ".xls", IO.FileMode.OpenOrCreate)
ms.WriteTo(myFile)
ms.Close()
ms.Dispose()

 

參考:

http://blog.xuite.net/sugopili/computerblog/66186028-NPOI+2.0

http://www.dotblogs.com.tw/mis2000lab/archive/2010/05/07/npoi_excel_vb_asp_net.aspx.aspx

http://www.dotblogs.com.tw/mis2000lab/archive/2010/05/24/npoi_export_excel_datareader.aspx

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Tank 的頭像
    Tank

    ○●◎ 痞客邦 ◎●○

    Tank 發表在 痞客邦 留言(0) 人氣()