0

我在尝试将其保存到 Excel 文件时遇到了一些问题,我正在尝试使用 Invokemember(“另存为”......但不起作用,我不知道我是否遗漏了什么。如果有人可以指出我正确的方向,我将不胜感激。

这是代码:

导入 System.Reflection 导入 System.Globalization 公共类 Excel

Public Shared Sub Export2Excel(datagridview As GridView, IsShowIsCaptions As Boolean) 
    Dim objMainApp As Object
    Dim objWorkBook As Object
    Dim objWorkBooks As Object
    Dim objWorkSheets As Object
    Dim objWorkSheet As Object
    Dim objCellRange As Object
    Dim Parameters As Object()
    Dim Sheet As Object
    Dim headers As String() = New String(datagridview.Columns.Count - 1) {}
    Dim columns As String() = New String(datagridview.Columns.Count - 1) {}
    Dim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("en-US")

    Dim i As Integer = 0
    Dim c As Integer = 0
    For c = 0 To datagridview.Columns.Count - 1
        headers(c) = datagridview.Columns(c).HeaderText 'OwningColumn.Name.ToString()
        columns(c) = Convert.ToString(ChrW(i))
        If (c < 26) Then
            i = c + 65
            columns(c) = Convert.ToChar(i) 'columns(c) = Convert.ToString((char)i)
        End If
        If (c = 26) Then columns(c) = "AA"
        If (c = 27) Then columns(c) = "AB"
        If (c = 28) Then columns(c) = "AC"
        If (c = 29) Then columns(c) = "AD"
        If (c = 30) Then columns(c) = "AE"
        If (c = 31) Then columns(c) = "AF"
        If (c = 32) Then columns(c) = "AG"
        If (c = 33) Then columns(c) = "AH"
        If (c = 34) Then columns(c) = "AI"
        If (c = 35) Then columns(c) = "AJ"
        If (c = 36) Then columns(c) = "AK"
        If (c = 37) Then columns(c) = "AL"
        If (c = 38) Then columns(c) = "AM"
        If (c = 39) Then columns(c) = "AN"
        If (c = 40) Then columns(c) = "AO"
        If (c = 41) Then columns(c) = "AP"
        If (c = 42) Then columns(c) = "AQ"
        If (c = 43) Then columns(c) = "AR"
        If (c = 44) Then columns(c) = "AS"
        If (c = 45) Then columns(c) = "AT"
        If (c = 46) Then columns(c) = "AU"
        If (c = 47) Then columns(c) = "AV"
        If (c = 48) Then columns(c) = "AW"
        If (c = 49) Then columns(c) = "AX"
        If (c = 50) Then columns(c) = "AY"
        If (c = 51) Then columns(c) = "AZ"
        If (c = 52) Then columns(c) = "BA"
        If (c = 53) Then columns(c) = "BB"
        If (c = 54) Then columns(c) = "BC"
        If (c = 55) Then columns(c) = "BD"
        If (c = 56) Then columns(c) = "BE"
        If (c = 57) Then columns(c) = "BF"
        If (c = 58) Then columns(c) = "BG"
        If (c = 59) Then columns(c) = "BH"
        If (c = 60) Then columns(c) = "BI"
        If (c = 61) Then columns(c) = "BJ"
        If (c = 62) Then columns(c) = "BK"
        If (c = 63) Then columns(c) = "BL"
        If (c = 64) Then columns(c) = "BM"
        If (c = 65) Then columns(c) = "BN"
        If (c = 66) Then columns(c) = "BO"
        If (c = 67) Then columns(c) = "BP"
        If (c = 68) Then columns(c) = "BQ"
        If (c = 69) Then columns(c) = "BR"
        If (c = 70) Then columns(c) = "BS"
        If (c = 71) Then columns(c) = "BT"
        If (c = 72) Then columns(c) = "BU"
        If (c = 73) Then columns(c) = "BV"
        If (c = 74) Then columns(c) = "BW"
        If (c = 75) Then columns(c) = "BX"
        If (c = 76) Then columns(c) = "BY"
        If (c = 77) Then columns(c) = "BZ"
        If (c = 78) Then columns(c) = "CA"
        If (c = 79) Then columns(c) = "CB"
        If (c = 80) Then columns(c) = "CC"
        If (c = 81) Then columns(c) = "CD"
        If (c = 82) Then columns(c) = "CE"
        If (c = 83) Then columns(c) = "CF"
        If (c = 84) Then columns(c) = "CG"
        If (c = 85) Then columns(c) = "CH"
        If (c = 86) Then columns(c) = "CI"
        If (c = 87) Then columns(c) = "CJ"
        If (c = 88) Then columns(c) = "CK"
        If (c = 89) Then columns(c) = "CL"
        If (c = 90) Then columns(c) = "CM"
        If (c = 91) Then columns(c) = "CN"
        If (c = 92) Then columns(c) = "CO"
        If (c = 93) Then columns(c) = "CP"
        If (c = 94) Then columns(c) = "CQ"
        If (c = 95) Then columns(c) = "CR"
        If (c = 96) Then columns(c) = "CS"
        If (c = 97) Then columns(c) = "CT"
        If (c = 98) Then columns(c) = "CU"
        If (c = 99) Then columns(c) = "CV"
        If (c = 100) Then columns(c) = "CW"
        If (c = 101) Then columns(c) = "CX"
        If (c = 102) Then columns(c) = "CY"
        If (c = 103) Then columns(c) = "CZ"
        If (c = 104) Then columns(c) = "DA"
        If (c = 105) Then columns(c) = "DB"
        If (c = 106) Then columns(c) = "DC"
        If (c = 107) Then columns(c) = "DD"
        If (c = 108) Then columns(c) = "DE"
        If (c = 109) Then columns(c) = "DF"
        If (c = 110) Then columns(c) = "DG"
        If (c = 111) Then columns(c) = "DH"
        If (c = 112) Then columns(c) = "DI"
        If (c = 113) Then columns(c) = "DJ"
        If (c = 114) Then columns(c) = "DK"
        If (c = 115) Then columns(c) = "DL"
        If (c = 116) Then columns(c) = "DM"
        If (c = 117) Then columns(c) = "DN"
        If (c = 118) Then columns(c) = "DO"
        If (c = 119) Then columns(c) = "DP"
        If (c = 120) Then columns(c) = "DQ"
        If (c = 121) Then columns(c) = "DR"
        If (c = 122) Then columns(c) = "DS"
        If (c = 123) Then columns(c) = "DT"
        If (c = 124) Then columns(c) = "DU"
        If (c = 125) Then columns(c) = "DV"
        If (c = 126) Then columns(c) = "DW"
        If (c = 127) Then columns(c) = "DX"
        If (c = 128) Then columns(c) = "DY"
        If (c = 129) Then columns(c) = "DZ"
        If (c = 130) Then columns(c) = "EA"
        If (c = 131) Then columns(c) = "EB"
        If (c = 132) Then columns(c) = "EC"
        If (c = 133) Then columns(c) = "ED"
        If (c = 134) Then columns(c) = "EE"
        If (c = 135) Then columns(c) = "EF"
        If (c = 136) Then columns(c) = "EG"
        If (c = 137) Then columns(c) = "EH"
        If (c = 138) Then columns(c) = "EI"
        If (c = 139) Then columns(c) = "EJ"
        If (c = 140) Then columns(c) = "EK"
        If (c = 141) Then columns(c) = "EL"
        If (c = 142) Then columns(c) = "EM"
        If (c = 143) Then columns(c) = "EN"
        If (c = 144) Then columns(c) = "EO"
        If (c = 145) Then columns(c) = "EP"
        If (c = 146) Then columns(c) = "EQ"
        If (c = 147) Then columns(c) = "ER"
        If (c = 148) Then columns(c) = "ES"
        If (c = 149) Then columns(c) = "ET"
        If (c = 150) Then columns(c) = "EU"
        If (c = 151) Then columns(c) = "EV"
        If (c = 152) Then columns(c) = "EW"
        If (c = 153) Then columns(c) = "EX"
        If (c = 154) Then columns(c) = "EY"
        If (c = 155) Then columns(c) = "EZ"
        If (c = 156) Then columns(c) = "FA"
        If (c = 157) Then columns(c) = "FB"
        If (c = 158) Then columns(c) = "FC"
        If (c = 159) Then columns(c) = "FD"
        If (c = 160) Then columns(c) = "FE"
        If (c = 161) Then columns(c) = "FF"
        If (c = 162) Then columns(c) = "FG"
        If (c = 163) Then columns(c) = "FH"
        If (c = 164) Then columns(c) = "FI"
        If (c = 165) Then columns(c) = "FJ"
        If (c = 166) Then columns(c) = "FK"
        If (c = 167) Then columns(c) = "FL"
        If (c = 168) Then columns(c) = "FM"
        If (c = 169) Then columns(c) = "FN"
        If (c = 170) Then columns(c) = "FO"
        If (c = 171) Then columns(c) = "FP"
        If (c = 172) Then columns(c) = "FQ"
        If (c = 173) Then columns(c) = "FR"
        If (c = 174) Then columns(c) = "FS"
        If (c = 175) Then columns(c) = "FT"

    Next
    Try
        Dim objClassType As Type
        objClassType = Type.GetTypeFromProgID("Excel.Application")
        objMainApp = Activator.CreateInstance(objClassType)

        objWorkBooks = objMainApp.[GetType]().InvokeMember("Workbooks", BindingFlags.GetProperty, Nothing, objMainApp, Nothing)
        objWorkBook = objWorkBooks.[GetType]().InvokeMember("Add", BindingFlags.InvokeMethod, Nothing, objWorkBooks, Nothing)

        objWorkSheets = objWorkBook.[GetType]().InvokeMember("Worksheets", BindingFlags.GetProperty, Nothing, objWorkBook, Nothing)

        Parameters = New [Object](0) {}
        Parameters(0) = 1
        objWorkSheet = objWorkSheets.[GetType]().InvokeMember("Item", BindingFlags.GetProperty, Nothing, objWorkSheets, Parameters, ci)

        If IsShowIsCaptions Then
            For c = 0 To datagridview.Columns.Count - 1
                Parameters = New [Object](1) {}
                Parameters(0) = columns(c) & "1"
                Parameters(1) = Missing.Value
                objCellRange = objWorkSheet.[GetType]().InvokeMember("Range", BindingFlags.GetProperty, Nothing, objWorkSheet, Parameters)

                Parameters = New [Object](0) {}
                Parameters(0) = headers(c)
                objCellRange.[GetType]().InvokeMember("Value", BindingFlags.SetProperty, Nothing, objCellRange, Parameters)
            Next
        End If
        For i = 0 To datagridview.Rows.Count - 1
            For c = 0 To datagridview.Columns.Count - 1
                Parameters = New [Object](1) {}
                Parameters(0) = columns(c) & Convert.ToString(i + 2)
                Parameters(1) = Missing.Value
                objCellRange = objWorkSheet.[GetType]().InvokeMember("Range", BindingFlags.GetProperty, Nothing, objWorkSheet, Parameters)

                Parameters = New [Object](0) {}
                If String.IsNullOrEmpty(datagridview.Rows(i).Cells(c).Text) Then
                    Parameters(0) = ""
                Else
                    Parameters(0) = datagridview.Rows(i).Cells(c).Text '.Text was as .Value
                End If
                objCellRange.[GetType]().InvokeMember("Value", BindingFlags.SetProperty, Nothing, objCellRange, Parameters)
            Next
        Next
        Parameters = New [Object](0) {}
        Parameters(0) = True
        objMainApp.[GetType]().InvokeMember("Visible", BindingFlags.SetProperty, Nothing, objMainApp, Parameters)
        'This line gives me an error: objWorkBook.[GetType]().InvokeMember("SaveAs", BindingFlags.InvokeMethod, Nothing, objWorkBook, New [Object](0) {"C:\\Test.xls"})
        objMainApp.[GetType]().InvokeMember("UserControl", BindingFlags.SetProperty, Nothing, objMainApp, Parameters)

    Catch ex As Exception
        MsgBox("Error exporting data to Excel: " + ex.Message)
    End Try
End Sub

结束类

4

0 回答 0