基於VB和EXCEL的報表設計及列印

ljm0211發表於2012-07-02
文/朱詩兵 高栓


  在現代管理資訊系統的開發中,經常涉及到資料資訊的分析、加工,
最終還需把統計結果形成各種形式的報表提供給領導決策參考,或進行外
部交流。在Visual Basic中製作報表,通常是用資料環境設計器(Data
Environment Designer)與資料包表設計器(Data Report Designer),或者
使用第三方產品來完成。但對於大多數習慣於Excel報表的使用者而言,用以
上方法生成的報表在格式和功能等方面往往不能滿足他們的要求。

  由於Excel具有自己的物件庫,在Visual Basic工程中可以加以引用,
透過對Excel使用OLE自動化,可以建立一些外觀整潔的報表,然後列印輸
出。這樣實現了Visual Basi應用程式對Excel的控制。本文將針對一個具
體例項,闡述基於VB和EXCEL的報表設計及列印過程。

 1)建立Excel物件

  Excel物件模型包括了128個不同的物件,從矩形、文字框等簡單的對
象到透視表,圖表等複雜的物件。下面簡單介紹一下其中最重要,也是用
得最多的五個物件。

(1)Application物件

  Application物件處於Excel物件層次結構的頂層,表示 Excel自身的
執行環境。

(2)Workbook物件

  Workbook物件直接地處於Application物件的下層,表示一個Excel工
作薄檔案。

(3)Worksheet物件

  Worksheet物件包含於Workbook物件,表示一個Excel工作表。

(4)Range物件

  Range物件包含於Worksheet物件,表示 Excel工作表中的一個或多個
單元格。

(5)Cells物件

  Cells物件包含於Worksheet物件,表示Excel工作表中的一個單元格。
  如果要啟動一個Excel,使用Workbook和Worksheet物件,下面的程式碼
啟動了Excel並建立了一個新的包含一個工作表的工作薄:

Dim zsbexcel As Excel.Application
Set zsbexcel = New Excel.Application
    zsbexcel.Visible = True

如要Excel不可見,可使zsbexcel.Visible = False

  zsbexcel.SheetsInNewWorkbook = 1
  Set zsbworkbook = zsbexcel.Workbooks.Add

 2)設定單元格和區域值

  要設定一張工作表中每個單元格的值,可以使用Worksheet物件的
Range屬性或Cells屬性。

With zsbexcel.ActiveSheet
    .Cells(1, 2).Value = "100"
    .Cells(2, 2).Value = "200"
    .Cells(3, 2).Value = "=SUM(B1:B2)"
    .Range("A3:A9") = "中國人民解放軍"
  End With

  要設定單元格或區域的字型、邊框,可以利用Range物件或Cells物件
的Borders屬性和Font屬性:

  With objexcel.ActiveSheet.Range("A2:K9").Borders  '邊框設定
    .LineStyle. = xlBorderLineStyleContinuous
    .Weight = xlThin
    .ColorIndex = 1
  End With
  With objexcel.ActiveSheet.Range("A3:K9").Font  '字型設定
    .Size = 14
    .Bold = True
    .Italic = True
    .ColorIndex = 3
  End With

  透過對Excel單元格和區域值的各種設定的深入瞭解,可以建立各種復
雜、美觀、滿足需要的、具有自己特點的報表。

 3)預覽及列印

  生成所需要的工作表後,就可以對EXCEL發出預覽、列印指令了。

  zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait   '
  設定列印方向
  zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4   '
  設定列印紙的打下
  zsbexcel.Caption = "列印預覽"        '設定預覽視窗的
  標題
  zsbexcel.ActiveSheet.PrintPreview      '列印預覽
  zsbexcel.ActiveSheet.PrintOut        '列印輸出

  透過列印方向、列印紙張大小的設定,不斷進行預覽,直到滿意為止,
最終進行列印輸出。

  為了在退出應用程式後EXCEL不提示使用者是否儲存已修改的檔案,需使
用如下語句:

  zsbexcel.DisplayAlerts = False
  zsbexcel.Quit    '退出EXCEL
  zsbexcel.DisplayAlerts = True

  如此設計的報表列印是透過 EXCEL程式來後臺實現的。對於使用者來
說,根本看不到具體過程,只看到一張張漂亮的報表輕易地被列印出來了。

 4)具體例項

  下面給出一個具體例項,它在window98、Visual Basic 6.0、
Microsoft Office97的環境下除錯透過。

  在VB中啟動一個新的Standard EXE工程,在“工程”選單的“引用”
選項下引用Excel Object Library;然後在Form中新增一個命令按鈕
cmdExcel;最後在窗體中輸入如下程式碼:

  Dim zsbexcel As Excel.Application
      Private Sub cmdExcel_Click()
          Set zsbexcel = New Excel.Application
   zsbexcel.Visible = True
   zsbexcel.SheetsInNewWorkbook = 1
   Set zsbworkbook = zsbexcel.Workbooks.Add
   With zsbexcel.ActiveSheet.Range("A2:C9").Borders   '邊框設定
      .LineStyle. = xlBorderLineStyleContinuous
      .Weight = xlThin
      .ColorIndex = 1
      End With
   With zsbexcel.ActiveSheet.Range("A3:C9").Font  '字型設定
       .Size = 14
      .Bold = True
      .Italic = True
      .ColorIndex = 3
   End With
  zsbexcel.ActiveSheet.Rows.HorizontalAlignment =
xlVAlignCenter   '水平居中

  zsbexcel.ActiveSheet.Rows.VerticalAlignment =
xlVAlignCenter    '垂直居中

  With zsbexcel.ActiveSheet
    .Cells(1, 2).Value = "100"
    .Cells(2, 2).Value = "200"
    .Cells(3, 2).Value = "=SUM(B1:B2)"
    .Cells(1, 3).Value = "中國人民解放軍"
    .Range("A3:A9") = "50"
  End With
 zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait    '
xlLandscape
 zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4
 zsbexcel.ActiveSheet.PrintOut
 zsbexcel.DisplayAlerts = False
 zsbexcel.Quit
 zsbexcel.DisplayAlerts = True
 Set zsbexcel = Nothing

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11411056/viewspace-734280/,如需轉載,請註明出處,否則將追究法律責任。

相關文章