Skapa Pivottabell-rapporter

 

Här demonstreras en teknik för att skapa Pivottabell-rapporter i arbetsböcker.

Som framgår av exemplet så kan vi mha av SQL-frågan och hur vi skapar innehållet i Pivottabellen styra vad användarna kan göra. Förfarandet skapar förutsättningar för både flexibla och fasta rapporter.


Följande "namespaces" måste importeras till projektet:

 

'© 2005 Alla rättigheter XL-Dennis

Const
stCon As String = "ODBC;DSN=MS Access Database;" & _

                        "DBQ=C:\Northwind.mdb;DefaultDir=C:\;" & _

                        "DriverId=25;FIL=MS Access;" & _

                        "MaxBufferSize=2048;PageTimeout=5;"

 

 Const stSQL As String = "SELECT ShipCountry, " & _

                         "COUNT(Freight) AS [# Of Shipments], " & _

                         "SUM(Freight) AS [Total Freight] " & _

                         "FROM Orders " & _

                         "GROUP BY ShipCountry;"

 

 Dim xlApp As Excel.Application

 

 Try

    'Finns en redan existerande Excel-sejour används denna.

     xlApp = Marshal.GetActiveObject("Excel.Application")

 Catch ex As COMException

    'Om ingen Excel-insans existerar skapar vi en här.

     xlApp = New Excel.Application

 End Try
 

Dim xlWBook As Excel.Workbook =xlApp.Workbooks. _
                      
Add(Excel.XlWBATemplate.xlWBATWorksheet)

Dim xlWSheet As Excel.Worksheet = DirectCast(xlWBook.Worksheets(1), _
                      
Excel.Worksheet)

Dim xlRange As Excel.Range = DirectCast(xlWSheet, Excel.Worksheet).Range("B2")

 

'Skapa Pivotcache.

Dim ptCache As Excel.PivotCache = xlWBook.PivotCaches.Add( _

                SourceType:=Excel.XlPivotTableSourceType.xlExternal)

 

'Tilldelar Pivotcachen värden.

With ptCache

  .Connection = stCon

  .CommandText = stSQL

  .CommandType = Excel.XlCmdType.xlCmdSql

End With

 

'Skapar Pivottabellen.

Dim ptTable As Excel.PivotTable = xlWSheet.PivotTables.Add( _

                                          PivotCache:=ptCache, _

                                          TableDestination:=xlRange, _

                                          TableName:="PT_Report")

 

'Sätter upp Pivottabellen.

With ptTable

   .ManualUpdate = True

   .PivotFields("ShipCountry").Orientation = _
             
Excel.XlPivotFieldOrientation.xlRowField

   .PivotFields("# Of Shipments").Orientation = _
             
Excel.XlPivotFieldOrientation.xlDataField

   .PivotFields("Total Freight").Orientation = _
            
 Excel.XlPivotFieldOrientation.xlDataField

   .Format(Excel.XlPivotFormatType.xlReport2)

   .ManualUpdate = False

End With

 

xlWBook.SaveAs("c:\Report.xls")

 

'Växlar över till Excel..

With xlApp

  .Visible = True

  .UserControl = True

End With

 

'Förbereder objekten för automatiskt borttag av GC.

ptTable = Nothing

ptCache = Nothing

xlWSheet = Nothing

xlWBook = Nothing