0

これを Excel ファイルに保存しようとすると、いくつか問題が発生します。Invokemember を使用しようとしています (「名前を付けて保存」... が機能しません。何か不足しているかどうかわかりません。私を正しい方向に向けることができます。感謝します。

これはdeコードです:

Imports System.Reflection Imports System.Globalization Public Class 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