天天看点

开发可复用的从Domino中导出数据到Excel的类

在domino开发中我们不可避免的要和报表打交道,一般就是生成各种Excel报表,本人主要为了自己在开发中方便,简单实现了一个基本类,现在功能有限,当然这个类我慢慢的根据以后遇到的需求逐渐完善。 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

Const EXCEL_APPLICATION        = "Excel.application" 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

Private Const BASEERROR                                                = 1200 

开发可复用的从Domino中导出数据到Excel的类

'Private Const ERROR_NOSUCHCELL                            = BASEERROR + 0 

开发可复用的从Domino中导出数据到Excel的类

'Private Const ERRORTEXT_NOSUCHCELL                    = "Excel Report - Could not get data from cell." 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

Const REG_97            = "Software\\Microsoft\\Office\\8.0\\Common\\InstallRoot"                    'Registry Key Office 97 

开发可复用的从Domino中导出数据到Excel的类

Const REG_2000        = "Software\\Microsoft\\Office\\9.0\\Common\\InstallRoot"                    'Registry Key Office 2000 

开发可复用的从Domino中导出数据到Excel的类

Const REG_XP            = "Software\\Microsoft\\Office\\10.0\\Common\\InstallRoot"                    'Registry Key Office XP 

开发可复用的从Domino中导出数据到Excel的类

Const REG_2003        ="Software\\Microsoft\\Office\\11.0\\Common\\InstallRoot"                    'Registry Key Office 2003 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

Const NAME_97        = "Office 97" 

开发可复用的从Domino中导出数据到Excel的类

Const NAME_2000        = "Office 2000" 

开发可复用的从Domino中导出数据到Excel的类

Const NAME_XP        = "Office XP" 

开发可复用的从Domino中导出数据到Excel的类

Const NAME_2003        = "Office 2003" 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

Class ExcelHelper 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Private xlApp As Variant                    ' Application object 

开发可复用的从Domino中导出数据到Excel的类

    Private strFilePath As String     

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Sub new(xlFilename As String, isVisible As Boolean) 

开发可复用的从Domino中导出数据到Excel的类

        On Error Goto GeneralError         

开发可复用的从Domino中导出数据到Excel的类

        Set xlApp = CreateObject(EXCEL_APPLICATION)        ' open the application 

开发可复用的从Domino中导出数据到Excel的类

        xlApp.Workbooks.Add xlFilename                            ' create an Excel workbook 

开发可复用的从Domino中导出数据到Excel的类

        xlApp.Visible = isVisible                                            ' make it visible (or not) 

开发可复用的从Domino中导出数据到Excel的类

        strFilePath = xlFilename                                            ' store the filename        

开发可复用的从Domino中导出数据到Excel的类

        Goto ExitSub 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

GeneralError: 

开发可复用的从Domino中导出数据到Excel的类

        If Not (xlApp Is Nothing) Then xlApp.quit                    ' quit, if there is an error 

开发可复用的从Domino中导出数据到Excel的类

        Resume ExitSub         

开发可复用的从Domino中导出数据到Excel的类

ExitSub: 

开发可复用的从Domino中导出数据到Excel的类

    End Sub     

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function save 

开发可复用的从Domino中导出数据到Excel的类

        xlApp.ActiveWorkbook.SaveAs( strFilePath ) 

开发可复用的从Domino中导出数据到Excel的类

    End Function     

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function saveAs(newFilename) 

开发可复用的从Domino中导出数据到Excel的类

        xlApp.ActiveWorkbook.SaveAs( newFileName ) 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function setCell( Sheet As Variant , row As Integer , column As Variant , value As Variant ) 

开发可复用的从Domino中导出数据到Excel的类

        xlApp.Workbooks(1).Worksheets( Sheet ).Cells( row , column ).Value = value 

开发可复用的从Domino中导出数据到Excel的类

    End Function 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function getCell( Sheet As Variant , row As Integer , column As Variant ) As String 

开发可复用的从Domino中导出数据到Excel的类

        On Error Goto GeneralError 

开发可复用的从Domino中导出数据到Excel的类

        getCell = xlApp.Workbooks(1).Worksheets( Sheet ).Cells( row , column ).Value 

开发可复用的从Domino中导出数据到Excel的类

        Goto ExitSub         

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        getCell = "" 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

ExitSub:         

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function quit 

开发可复用的从Domino中导出数据到Excel的类

        If Not (xlApp Is Nothing) Then 

开发可复用的从Domino中导出数据到Excel的类

            xlApp.Quit 

开发可复用的从Domino中导出数据到Excel的类

            Set xlApp = Nothing     

开发可复用的从Domino中导出数据到Excel的类

        End If 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function setVisibility(isVisible As Boolean) 

开发可复用的从Domino中导出数据到Excel的类

        If (isVisible And Not xlApp.Visible)     Then     xlApp.Visible = True 

开发可复用的从Domino中导出数据到Excel的类

        If (Not isVisible And xlApp.Visible)    Then        xlApp.Visible = False 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function setSheetName(Sheet As Variant,sheetName As String) 

开发可复用的从Domino中导出数据到Excel的类

        xlApp.Workbooks(1).Worksheets( Sheet ).Select 

开发可复用的从Domino中导出数据到Excel的类

        xlApp.Workbooks(1).Worksheets( Sheet ).Name=sheetName 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function setCellColor(Sheet As Variant, row As Integer, column As Variant, innercolor As Variant) 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        If Cstr(innercolor) <> "" Then 

开发可复用的从Domino中导出数据到Excel的类

            xlApp.Workbooks(1).Worksheets( Sheet ).Cells( row , column ).Interior.ColorIndex = innercolor     

开发可复用的从Domino中导出数据到Excel的类

        End If         

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function setCellFont(Sheet As Variant, row As Integer, column As Variant, style As Variant, size As Variant, color As Variant) 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        If Cstr(style) <> "" Then  

开发可复用的从Domino中导出数据到Excel的类

            xlApp.Workbooks(1).Worksheets( Sheet ).Cells( row , column ).Font.FontStyle         = style 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        If Cstr(size) <> "" Then 

开发可复用的从Domino中导出数据到Excel的类

            xlApp.Workbooks(1).Worksheets( Sheet ).Cells( row , column ).Font.Size            = size 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        If Cstr(color) <> "" Then 

开发可复用的从Domino中导出数据到Excel的类

            xlApp.Workbooks(1).Worksheets( Sheet ).Cells( row , column ).Font.ColorIndex     = color 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function setRowFont(Sheet As Variant, row As Integer,  style As Variant, size As Variant, color As Variant) 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        Dim rowpara As String 

开发可复用的从Domino中导出数据到Excel的类

        rowpara=Cstr(row)+":"+Cstr(row) 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

            xlApp.Workbooks(1).Worksheets( Sheet ).Rows(rowpara).Select 

开发可复用的从Domino中导出数据到Excel的类

            xlApp.Selection.Font.FontStyle     = style 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

            xlApp.Selection.Font.Size    = size 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

            xlApp.Selection.Font.ColorIndex = color 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function getVersion() As String         

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        Dim formula As String 

开发可复用的从Domino中导出数据到Excel的类

        Dim SWVersion As String 

开发可复用的从Domino中导出数据到Excel的类

        Dim Versions List As String 

开发可复用的从Domino中导出数据到Excel的类

        Dim v As Variant         

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        Versions(NAME_97)        = REG_97 

开发可复用的从Domino中导出数据到Excel的类

        Versions(NAME_2000)    = REG_2000 

开发可复用的从Domino中导出数据到Excel的类

        Versions(NAME_XP)        = REG_XP 

开发可复用的从Domino中导出数据到Excel的类

        Versions(NAME_2003)    = REG_2003     

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        Forall vers In Versions 

开发可复用的从Domino中导出数据到Excel的类

            formula$ = | (@RegQueryValue("HKEY_LOCAL_MACHINE"; "| & vers & |";"Path")) | 

开发可复用的从Domino中导出数据到Excel的类

            v = Evaluate( formula$ ) 

开发可复用的从Domino中导出数据到Excel的类

            If v(0) <> "" Then 

开发可复用的从Domino中导出数据到Excel的类

                getVersion = Listtag(vers) 

开发可复用的从Domino中导出数据到Excel的类

                Goto ExitSub 

开发可复用的从Domino中导出数据到Excel的类

            End If 

开发可复用的从Domino中导出数据到Excel的类

        End Forall 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        getVersion = ""         

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

GeneralError:         

开发可复用的从Domino中导出数据到Excel的类

        getVersion = "" 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function exportNotesView(view As NotesView, Sheet As Variant, OffsetRow As Integer, OffsetCol As Integer, isWithheader As Boolean, includeIcons As Boolean, includeColors As Boolean, includeHidden As Boolean) 

开发可复用的从Domino中导出数据到Excel的类

        Dim viewnav As NotesViewNavigator 

开发可复用的从Domino中导出数据到Excel的类

        Dim entry As NotesViewEntry 

开发可复用的从Domino中导出数据到Excel的类

        Dim viewcolumns As Variant 

开发可复用的从Domino中导出数据到Excel的类

        Dim column As Integer 

开发可复用的从Domino中导出数据到Excel的类

        Dim row As Integer         

开发可复用的从Domino中导出数据到Excel的类

        Dim i As Integer 

开发可复用的从Domino中导出数据到Excel的类

        Dim array(0 To 9) As String 

开发可复用的从Domino中导出数据到Excel的类

        array(0)="A"  

开发可复用的从Domino中导出数据到Excel的类

        array(1)="B"   

开发可复用的从Domino中导出数据到Excel的类

        array(2)="C"  

开发可复用的从Domino中导出数据到Excel的类

        array(3)="D"  

开发可复用的从Domino中导出数据到Excel的类

        array(4)="E"  

开发可复用的从Domino中导出数据到Excel的类

        array(5)="F"  

开发可复用的从Domino中导出数据到Excel的类

        array(6)="G"  

开发可复用的从Domino中导出数据到Excel的类

        array(7)="H"  

开发可复用的从Domino中导出数据到Excel的类

        array(8)="I"  

开发可复用的从Domino中导出数据到Excel的类

        array(9)="J"          

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        Set viewnav     = view.CreateViewNav() 

开发可复用的从Domino中导出数据到Excel的类

        Set entry        = viewnav.GetFirstDocument() 

开发可复用的从Domino中导出数据到Excel的类

        viewcolumns    = view.Columns 

开发可复用的从Domino中导出数据到Excel的类

        row                 = OffsetRow + 1 

开发可复用的从Domino中导出数据到Excel的类

        column             = OffsetCol + 1         

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        If isWithHeader Then 

开发可复用的从Domino中导出数据到Excel的类

            Forall vc In viewcolumns 

开发可复用的从Domino中导出数据到Excel的类

                Call Me.setCell(Sheet, row, column, vc.title)     

开发可复用的从Domino中导出数据到Excel的类

                column = column + 1 

开发可复用的从Domino中导出数据到Excel的类

            End Forall 

开发可复用的从Domino中导出数据到Excel的类

        End If             

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        While Not (entry Is Nothing) 

开发可复用的从Domino中导出数据到Excel的类

            row             = row + 1 

开发可复用的从Domino中导出数据到Excel的类

            column         = OffsetCol + 1 

开发可复用的从Domino中导出数据到Excel的类

            Forall cv In entry.ColumnValues 

开发可复用的从Domino中导出数据到Excel的类

                If doColumnExport(viewcolumns(column - OffsetCol - 1), includeHidden, IncludeIcons, includeColors) Then 

开发可复用的从Domino中导出数据到Excel的类

                    Call Me.setCell(Sheet, row, column, Cstr(cv))     

开发可复用的从Domino中导出数据到Excel的类

                End If 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

            End Forall             

开发可复用的从Domino中导出数据到Excel的类

            Set entry = viewnav.GetNextDocument(entry) 

开发可复用的从Domino中导出数据到Excel的类

        Wend         

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        For i=0 To  (column-1)  

开发可复用的从Domino中导出数据到Excel的类

            Call Me.autoFit(Sheet,array(i))             

开发可复用的从Domino中导出数据到Excel的类

        Next     

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Private Function doColumnExport (viewcol As NotesViewColumn, includeHidden As Boolean, IncludeIcons As Boolean, includeColors As Boolean) As Boolean 

开发可复用的从Domino中导出数据到Excel的类

        Dim isHiddenOK     As Boolean 

开发可复用的从Domino中导出数据到Excel的类

        Dim isIconOK         As Boolean 

开发可复用的从Domino中导出数据到Excel的类

        Dim isColorOK         As Boolean 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

        isHiddenOK = (viewcol.isHidden And IncludeHidden) Or Not viewcol.isHidden 

开发可复用的从Domino中导出数据到Excel的类

        isIconOK    = (viewcol.isIcon And IncludeIcons) Or Not (viewcol.isIcon) 

开发可复用的从Domino中导出数据到Excel的类

        isColorOK    = True 

开发可复用的从Domino中导出数据到Excel的类

        doColumnExport = isHiddenOK And isIconOK And isColorOK 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Public Function autoFit(Sheet As Variant,col As String) 

开发可复用的从Domino中导出数据到Excel的类

        xlApp.Workbooks(1).Worksheets(Sheet).Columns(col+":"+col).EntireColumn.AutoFit 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

End Class 

测试程序调用的代理代码如下: 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

Sub Initialize     

开发可复用的从Domino中导出数据到Excel的类

    Dim view As NotesView 

开发可复用的从Domino中导出数据到Excel的类

    Dim excelfilepath As String 

开发可复用的从Domino中导出数据到Excel的类

    Dim Sheet As Variant 

开发可复用的从Domino中导出数据到Excel的类

    Dim OffsetX As Integer 

开发可复用的从Domino中导出数据到Excel的类

    Dim OffsetY As Integer 

开发可复用的从Domino中导出数据到Excel的类

    Dim isWithHeader As Boolean 

开发可复用的从Domino中导出数据到Excel的类

    Dim includeIcons As Boolean 

开发可复用的从Domino中导出数据到Excel的类

    Dim includeColors As Boolean 

开发可复用的从Domino中导出数据到Excel的类

    Dim includeHidden As Boolean 

开发可复用的从Domino中导出数据到Excel的类

    Dim session As New NotesSession 

开发可复用的从Domino中导出数据到Excel的类

    Dim currdb As NotesDatabase     

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Const Font_Style            = "Bold" 

开发可复用的从Domino中导出数据到Excel的类

    Const Font_Size                =12 

开发可复用的从Domino中导出数据到Excel的类

    Const Font_Color                =5         

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Set currdb=session.CurrentDatabase 

开发可复用的从Domino中导出数据到Excel的类

    Sheet                     = 1 

开发可复用的从Domino中导出数据到Excel的类

    OffsetX                    = 1 

开发可复用的从Domino中导出数据到Excel的类

    OffsetY                    = 1 

开发可复用的从Domino中导出数据到Excel的类

    isWithHeader            = True 

开发可复用的从Domino中导出数据到Excel的类

    includeIcons            = True 

开发可复用的从Domino中导出数据到Excel的类

    includeColors        = True 

开发可复用的从Domino中导出数据到Excel的类

    includeHidden        = True 

开发可复用的从Domino中导出数据到Excel的类

    excelfilepath            = ""            ' create an empty excel file 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    'Set view         = ws.CurrentView.View 

开发可复用的从Domino中导出数据到Excel的类

    Set view=currdb.GetView("chunainfo") 

开发可复用的从Domino中导出数据到Excel的类

    Set report= New ExcelHelper("", True) 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    'Call report.setCellFont(1, 2, 2, Font_Style, Font_Size, Font_Color) 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

    Call report.setRowFont(1, 2, Font_Style, Font_Size, Font_Color) 

开发可复用的从Domino中导出数据到Excel的类

    Call report.exportNotesView(view, Sheet, OffsetX, OffsetY, isWithheader, includeIcons, includeColors, includeHidden) 

开发可复用的从Domino中导出数据到Excel的类

    Call report.exportNotesView(view, 2, OffsetX, OffsetY, isWithheader, includeIcons, includeColors, includeHidden) 

开发可复用的从Domino中导出数据到Excel的类

    Call report.setVisibility(True) 

开发可复用的从Domino中导出数据到Excel的类

    Call report.setSheetName(Sheet,"请假单") 

开发可复用的从Domino中导出数据到Excel的类

    Call report.setSheetName(2,"出差报核单") 

开发可复用的从Domino中导出数据到Excel的类

    Msgbox "成功导出报表" 

开发可复用的从Domino中导出数据到Excel的类
开发可复用的从Domino中导出数据到Excel的类

End Sub 

开发可复用的从Domino中导出数据到Excel的类

该类还有很多不完善的地方,一点一点慢慢来吧。

开发可复用的从Domino中导出数据到Excel的类

本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2008/08/08/DominoExcel.html,如需转载请自行联系原作者