⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cexcelfile.vb

📁 生成Excel文件.Visual Basic 2005 代码.包含一个类.
💻 VB
📖 第 1 页 / 共 2 页
字号:
        Dim row As Short

        Try
            'the row and column values are written to the excel file as
            'unsigned integers. Therefore, must convert the longs to integer.

            Dim INTEGER_RECORD As tInteger
            Dim NUMBER_RECORD As tNumber
            'Dim b As Byte
            Dim TEXT_RECORD As tText

            If lrow > 32767 Then
                row = CShort(lrow - 65536)
            Else
                row = CShort(lrow) - 1 'rows/cols in Excel binary file are zero based
            End If

            If lcol > 32767 Then
                col = CShort(lcol - 65536)
            Else
                col = CShort(lcol) - 1 'rows/cols in Excel binary file are zero based
            End If

            Select Case ValueType
                Case ValueTypes.xlsInteger
                    With INTEGER_RECORD
                        .opcode = 2
                        .length = 9
                        .row = row
                        .col = col
                        .rgbAttr1 = CByte(HiddenLocked)
                        .rgbAttr2 = CByte(CellFontUsed + CellFormat)
                        .rgbAttr3 = CByte(Alignment)
                        .intValue = CShort(Value)
                    End With

                    FilePut(m_shtFileNumber, INTEGER_RECORD)

                Case ValueTypes.xlsNumber
                    With NUMBER_RECORD
                        .opcode = 3
                        .length = 15
                        .row = row
                        .col = col
                        .rgbAttr1 = CByte(HiddenLocked)
                        .rgbAttr2 = CByte(CellFontUsed + CellFormat)
                        .rgbAttr3 = CByte(Alignment)
                        .NumberValue = CDbl(Value)
                    End With

                    FilePut(m_shtFileNumber, NUMBER_RECORD)

                Case ValueTypes.xlsText
                    st = CType(Value, String)

                    l = GetLength(st) 'LenB(StrConv(st, vbFromUnicode)) 'Len(st$)

                    With TEXT_RECORD
                        .opcode = 4
                        .length = 10
                        'Length of the text portion of the record
                        .TextLength = l

                        'Total length of the record
                        .length = 8 + l

                        .row = row
                        .col = col

                        .rgbAttr1 = CByte(HiddenLocked)
                        .rgbAttr2 = CByte(CellFontUsed + CellFormat)
                        .rgbAttr3 = CByte(Alignment)

                        'Put record header
                        FilePut(m_shtFileNumber, TEXT_RECORD)

                        'Then the actual string data
                        'For a = 1 To l%
                        '   b = Asc(Mid$(st$, a, 1))
                        '   Put #m_shtFileNumber, , b
                        'Next

                        FilePut(m_shtFileNumber, st)
                    End With

            End Select

            WriteValue = 0 'return with no error
        Catch ex As Exception
            WriteValue = Err.Number
        End Try

    End Function

    Public Function SetMargin(ByRef Margin As MarginTypes, ByRef MarginValue As Double) As Integer

        Try
            'write the spreadsheet's layout information (in inches)
            Dim MarginRecord As MARGIN_RECORD_LAYOUT

            With MarginRecord
                .opcode = Margin
                .length = 8
                .MarginValue = MarginValue 'in inches
            End With

            FilePut(m_shtFileNumber, MarginRecord)

            SetMargin = 0

        Catch ex As Exception
            SetMargin = Err.Number
        End Try

    End Function

    ''' <summary>
    ''' 设置Excel列宽度。
    ''' </summary>
    ''' <param name="FirstColumn">起始列</param>
    ''' <param name="LastColumn">终止列。</param>
    ''' <param name="WidthValue">列宽。</param>
    Public Function SetColumnWidth(ByRef FirstColumn As Byte, ByRef LastColumn As Byte, ByRef WidthValue As Short) As Integer
        Try
            Dim COLWIDTH As COLWIDTH_RECORD

            With COLWIDTH
                .opcode = 36
                .length = 4
                .col1 = FirstColumn - 1
                .col2 = LastColumn - 1
                .ColumnWidth = WidthValue * 256 'values are specified as 1/256 of a character
            End With

            FilePut(m_shtFileNumber, COLWIDTH)

            SetColumnWidth = 0
        Catch ex As Exception
            SetColumnWidth = Err.Number
        End Try
    End Function

    ''' <summary>
    ''' 设置单元格字体格式。
    ''' </summary>
    ''' <param name="FontName">字体名称。</param>
    ''' <param name="FontHeight">字体大小。</param>
    ''' <param name="FontFormat">字体格式。</param>
    Public Function SetFont(ByRef FontName As String, ByRef FontHeight As Short, ByRef FontFormat As FontFormatting) As Short
        Dim l As Short

        Try
            'you can set up to 4 fonts in the spreadsheet file. When writing a value such
            'as a Text or Number you can specify one of the 4 fonts (numbered 0 to 3)

            Dim FONTNAME_RECORD As FONT_RECORD

            l = GetLength(FontName) 'LenB(StrConv(FontName, vbFromUnicode)) 'Len(FontName)

            With FONTNAME_RECORD
                .opcode = 49
                .length = 5 + l
                .FontHeight = FontHeight * 20
                .FontAttributes1 = CByte(FontFormat) 'bold/underline etc...
                .FontAttributes2 = CByte(0) 'reserved-always zero!!
                .FontNameLength = CByte(l) 'CByte(Len(FontName))
            End With

            FilePut(m_shtFileNumber, FONTNAME_RECORD)

            'Then the actual font name data
            'Dim b As Byte
            'For a = 1 To l%
            '   b = Asc(Mid$(FontName, a, 1))
            '   Put #m_shtFileNumber, , b
            'Next

            FilePut(m_shtFileNumber, FontName)

            SetFont = 0

        Catch ex As Exception
            SetFont = Err.Number
        End Try

    End Function

    ''' <summary>
    ''' 设置页眉。
    ''' </summary>
    ''' <param name="HeaderText">页眉文字。</param>
    Public Function SetHeader(ByRef HeaderText As String) As Integer
        Dim l As Short

        Try

            Dim HEADER_RECORD As HEADER_FOOTER_RECORD

            l = GetLength(HeaderText)   'LenB(StrConv(HeaderText, vbFromUnicode)) 'Len(HeaderText)

            With HEADER_RECORD
                .opcode = 20
                .length = 1 + l
                .TextLength = CByte(l) 'CByte(Len(HeaderText))
            End With

            FilePut(m_shtFileNumber, HEADER_RECORD)

            'Then the actual Header text
            'Dim b As Byte
            'For a = 1 To l%
            '   b = Asc(Mid$(HeaderText, a, 1))
            '   Put #m_shtFileNumber, , b
            'Next

            FilePut(m_shtFileNumber, HeaderText)

            SetHeader = 0

        Catch ex As Exception
            SetHeader = Err.Number
        End Try

    End Function

    ''' <summary>
    ''' 设置页脚。
    ''' </summary>
    ''' <param name="FooterText">页脚文字。</param>
    Public Function SetFooter(ByRef FooterText As String) As Integer
        Dim l As Short

        Try
            Dim FOOTER_RECORD As HEADER_FOOTER_RECORD

            l = GetLength(FooterText) 'LenB(StrConv(FooterText, vbFromUnicode)) 'Len(FooterText)

            With FOOTER_RECORD
                .opcode = 21
                .length = 1 + l
                .TextLength = CByte(l) 'CByte(Len(FooterText))
            End With

            FilePut(m_shtFileNumber, FOOTER_RECORD)

            'Then the actual Header text
            'Dim b As Byte
            'For a = 1 To l%
            '   b = Asc(Mid$(FooterText, a, 1))
            '   Put #m_shtFileNumber, , b
            'Next

            FilePut(m_shtFileNumber, FooterText)

            SetFooter = 0

        Catch ex As Exception
            SetFooter = Err.Number
        End Try

    End Function

    ''' <summary>
    ''' 设置文件密码。
    ''' </summary>
    ''' <param name="PasswordText">密码。</param>
    Public Function SetFilePassword(ByRef PasswordText As String) As Integer
        Dim l As Short

        Try
            Dim FILE_PASSWORD_RECORD As PASSWORD_RECORD

            l = GetLength(PasswordText) 'LenB(StrConv(PasswordText, vbFromUnicode)) 'Len(PasswordText)

            With FILE_PASSWORD_RECORD
                .opcode = 47
                .length = l
            End With

            FilePut(m_shtFileNumber, FILE_PASSWORD_RECORD)

            'Then the actual Password text
            'Dim b As Byte
            'For a = 1 To l%
            '   b = Asc(Mid$(PasswordText, a, 1))
            '   Put #m_shtFileNumber, , b
            'Next

            FilePut(m_shtFileNumber, PasswordText)

            SetFilePassword = 0

        Catch ex As Exception
            SetFilePassword = Err.Number
        End Try

    End Function

    Private Function WriteDefaultFormats() As Integer

        Dim cFORMAT_COUNT_RECORD As FORMAT_COUNT_RECORD
        Dim cFORMAT_RECORD As FORMAT_RECORD
        Dim lIndex As Integer
        Dim aFormat(23) As String
        Dim l As Integer
        Dim q As String = Chr(34)

        aFormat(0) = "General"
        aFormat(1) = "0"
        aFormat(2) = "0.00"
        aFormat(3) = "#,##0"
        aFormat(4) = "#,##0.00"
        aFormat(5) = "#,##0\ " & q & "$" & q & ";\-#,##0\ " & q & "$" & q
        aFormat(6) = "#,##0\ " & q & "$" & q & ";[Red]\-#,##0\ " & q & "$" & q
        aFormat(7) = "#,##0.00\ " & q & "$" & q & ";\-#,##0.00\ " & q & "$" & q
        aFormat(8) = "#,##0.00\ " & q & "$" & q & ";[Red]\-#,##0.00\ " & q & "$" & q
        aFormat(9) = "0%"
        aFormat(10) = "0.00%"
        aFormat(11) = "0.00E+00"
        aFormat(12) = "dd/mm/yy"
        aFormat(13) = "dd/\ mmm\ yy"
        aFormat(14) = "dd/\ mmm"
        aFormat(15) = "mmm\ yy"
        aFormat(16) = "h:mm\ AM/PM"
        aFormat(17) = "h:mm:ss\ AM/PM"
        aFormat(18) = "hh:mm"
        aFormat(19) = "hh:mm:ss"
        aFormat(20) = "dd/mm/yy\ hh:mm"
        aFormat(21) = "##0.0E+0"
        aFormat(22) = "mm:ss"
        aFormat(23) = "@"

        With cFORMAT_COUNT_RECORD
            .opcode = &H1FS
            .length = &H2S
            .Count = CShort(UBound(aFormat))
        End With

        FilePut(m_shtFileNumber, cFORMAT_COUNT_RECORD)

        Dim b As Byte
        Dim a As Integer
        For lIndex = LBound(aFormat) To UBound(aFormat)
            l = Len(aFormat(lIndex))
            With cFORMAT_RECORD
                .opcode = &H1ES
                .length = CShort(l + 1)
                .FormatLenght = CShort(l)
            End With

            FilePut(m_shtFileNumber, cFORMAT_RECORD)

            'Then the actual format
            For a = 1 To l
                b = Asc(Mid(aFormat(lIndex), a, 1))
                FilePut(m_shtFileNumber, b)
            Next
        Next lIndex

    End Function

    Private Function MKI(ByRef x As Short) As String
        Dim temp As String
        'used for writing integer array values to the disk file
        temp = Space(2)
        CopyMemory(temp, x, 2)
        MKI = temp
    End Function

    Private Function GetLength(ByVal strText As String) As Integer
        Return Encoding.Default.GetBytes(strText).Length
    End Function

    ''' <summary>
    ''' 设置行的默认高度。
    ''' </summary>
    ''' <param name="HeightValue">行高。</param>
    Public Function SetDefaultRowHeight(ByVal HeightValue As Integer) As Integer
        Try
            'Height is defined in units of 1/20th of a point. Therefore, a 10-point font
            'would be 200 (i.e. 200/20 = 10). This function takes a HeightValue such as
            '14 point and converts it the correct size before writing it to the file.

            Dim DEFHEIGHT As DEF_ROWHEIGHT_RECORD

            With DEFHEIGHT
                .opcode = 37
                .length = 2
                .RowHeight = HeightValue * 20  'convert points to 1/20ths of point
            End With

            FilePut(m_shtFileNumber, DEFHEIGHT)

            SetDefaultRowHeight = 0

        Catch ex As Exception
            SetDefaultRowHeight = Err.Number
        End Try
    End Function

    ''' <summary>
    ''' 设置行高。
    ''' </summary>
    ''' <param name="Row">指定的行号。</param>
    ''' <param name="HeightValue">行高值。</param>
    Public Function SetRowHeight(ByVal Row As Integer, ByVal HeightValue As Short) As Integer

        Dim o_intRow As Integer

        Try
            'the row and column values are written to the excel file as
            'unsigned integers. Therefore, must convert the longs to integer.

            If Row > 32767 Then
                o_intRow = CInt(Row - 65536)
            Else
                o_intRow = CInt(Row) - 1    'rows/cols in Excel binary file are zero based
            End If

            'Height is defined in units of 1/20th of a point. Therefore, a 10-point font
            'would be 200 (i.e. 200/20 = 10). This function takes a HeightValue such as
            '14 point and converts it the correct size before writing it to the file.

            Dim ROWHEIGHTREC As ROW_HEIGHT_RECORD

            With ROWHEIGHTREC
                .opcode = 8
                .length = 16
                .RowNumber = o_intRow
                .FirstColumn = 0
                .LastColumn = 256
                .RowHeight = HeightValue * 20 'convert points to 1/20ths of point
                .internal = 0
                .DefaultAttributes = 0
                .FileOffset = 0
                .rgbAttr1 = 0
                .rgbAttr2 = 0
                .rgbAttr3 = 0
            End With

            FilePut(m_shtFileNumber, ROWHEIGHTREC)

            SetRowHeight = 0

        Catch ex As Exception
            SetRowHeight = Err.Number
        End Try
    End Function

End Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -