csharp 阅读Excel文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp 阅读Excel文件相关的知识,希望对你有一定的参考价值。

Function LeerArchivo(ByVal pNombreArchivo) As String
        Dim ListaErrores As Collection(Of LDCOMCARGAErrores) = _
        New Collection(Of LDCOMCARGAErrores)()

        Dim ListaDetalleMezcla As Collection(Of LDCOMDetalle_Mezcla) = _
        New Collection(Of LDCOMDetalle_Mezcla)()

        Dim ListaAgente As Collection(Of LDCOMAgente) = _
        New Collection(Of LDCOMAgente)()

        Dim ListaCabecera As Collection(Of LDCOMCabecera) = _
        New Collection(Of LDCOMCabecera)()


        Dim oGeneralParamsOrigen As SAPbobsCOM.GeneralDataParams

        Dim vDatosConn As New System.Data.OleDb.OleDbConnection
        Dim vDatosExcelCabecera As System.Data.OleDb.OleDbDataAdapter = Nothing
        Dim vDatosExcelDetalleMezcla As System.Data.OleDb.OleDbDataAdapter = Nothing
        Dim vDatosExcelDetalleAgente As System.Data.OleDb.OleDbDataAdapter = Nothing
        Dim DS_Ajuste_Excel As New DataSet()
        Dim vTabla_Cabecera As New DataTable("Tabla_Excel")
        Dim vTabla_Mezcla As New DataTable("Tabla_Mezcla")
        Dim vTabla_Agente As New DataTable("Tabla_Agente")
        Dim recset As SAPbobsCOM.Recordset

        Dim Erreor As LDCOMCARGAErrores = New LDCOMCARGAErrores()
        Dim objAgente As LDCOMAgente = New LDCOMAgente()
        Dim ItemDetalleMezcla As LDCOMDetalle_Mezcla = New LDCOMDetalle_Mezcla()
        Dim ItemCabecera As LDCOMCabecera = New LDCOMCabecera()

        recset = SBOLDObjeto.Company.GetBusinessObject(SAPbobsCOM.BoObjectTypes.BoRecordset)

        Dim FormaCreada As SAPbouiCOM.Form

        '-----------------------------------------
        ' Archivo Excel seleccionado abrir
        '-----------------------------------------
        Try
            vDatosConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pNombreArchivo + ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1"""
            vDatosConn.Open()
        Catch ex As Exception
            Throw New Exception("Verifique que el archivo no se encuentre abierto")
        End Try

        '-----------------------------------------
        ' Busca por defecto la hoja con el nombre Ajustes
        '-----------------------------------------
        vDatosExcelCabecera = New System.Data.OleDb.OleDbDataAdapter("Select * from [Meta$]", vDatosConn)
        vDatosExcelDetalleMezcla = New System.Data.OleDb.OleDbDataAdapter("Select * from [Mezcla$]", vDatosConn)
        vDatosExcelDetalleAgente = New System.Data.OleDb.OleDbDataAdapter("Select * from [Agente$]", vDatosConn)
        '-----------------------------------------
        ' Definicion de la tabla donde se cargaran los datos.
        '-----------------------------------------
        Try
            vDatosExcelCabecera.Fill(vTabla_Cabecera)
            vDatosExcelDetalleMezcla.Fill(vTabla_Mezcla)
            vDatosExcelDetalleAgente.Fill(vTabla_Agente)
        Catch ex As Exception

            Throw New Exception("El archivo no pudo ser cargado.  Verifique que el nombre de las hojas de cálculo sea el correcto ")
        End Try

        '-----------------------------------------
        ' Verificar Metas del archivo
        '-----------------------------------------
        Dim Articulos As String = String.Empty


        If vTabla_Cabecera.Columns.Count > 3 Then
            Throw New Exception("la cantidad de columnas de archivo es incorrecta")
        End If
        If vTabla_Cabecera.Columns.Item(0).ColumnName <> "Código de Meta" Then

            Erreor.Hoja = "Meta"
            Erreor.Fila = 1
            Erreor.Descripcion = "El encabezado " & vTabla_Cabecera.Columns.Item(0).ColumnName & " es incorrecto. Debe de ser Código de Meta"
            ListaErrores.Add(Erreor)

            Throw New Exception("El encabezado " & vTabla_Cabecera.Columns.Item(0).ColumnName & " es incorrecto. Debe de ser Código de Meta")
        End If

        If vTabla_Cabecera.Columns.Item(1).ColumnName <> "Descripción" Then
            Erreor.Hoja = "Meta"
            Erreor.Fila = 1
            Erreor.Descripcion = "El encabezado " & vTabla_Cabecera.Columns.Item(1).ColumnName & " es incorrecto. Debe de ser Descripcion"
            ListaErrores.Add(Erreor)

            Throw New Exception("El encabezado " & vTabla_Cabecera.Columns.Item(1).ColumnName & " es incorrecto. Debe de ser Descripcion")
        End If

        If vTabla_Cabecera.Columns.Item(2).ColumnName <> "Período" Then

            Erreor.Hoja = "Meta"
            Erreor.Fila = 1
            Erreor.Descripcion = "El encabezado " & vTabla_Cabecera.Columns.Item(1).ColumnName & "  es incorrecto. Debe de ser Período"
            ListaErrores.Add(Erreor)
            Throw New Exception("El encabezado " & vTabla_Cabecera.Columns.Item(1).ColumnName & " es incorrecto. Debe de ser Período")
        End If
        Try
            Dim ExisteCobro As Boolean = False
            Dim ExisteVentaTotal As Boolean = False

            Dim vFila As Integer = 2
            Dim detalleExiste As Boolean = False
            Dim CabeceraCorrecta As Boolean = True
            Dim MetaCreadaExito As Boolean = False

            Dim valorInvalido As Boolean = False



            For Each vDataRow As DataRow In vTabla_Cabecera.Rows

                ExisteCobro = False
                ExisteVentaTotal = False
                '-----------------------------------------
                ' Verificar los datos
                '-----------------------------------------
                If IsDBNull(vDataRow("Código de Meta")) Then
                    Erreor = New LDCOMCARGAErrores()
                    Erreor.Hoja = "Meta"
                    Erreor.Fila = vFila
                    Erreor.Descripcion = "La columna de código es incorrecta."
                    ListaErrores.Add(Erreor)
                    CabeceraCorrecta = False
                    'Throw New Exception("La columna de código en la fila " & vFila & " es incorrecta.")
                End If

                If IsDBNull(vDataRow("Período")) Then
                    Erreor = New LDCOMCARGAErrores()
                    Erreor.Hoja = "Meta"
                    Erreor.Fila = vFila
                    Erreor.Descripcion = "La columna de Período es incorrecta."

                    If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                        ListaErrores.Add(Erreor)

                    End If


                    CabeceraCorrecta = False

                Else
                    If (vDataRow("Período").ToString.Length > 7 Or vDataRow("Período").ToString.Length < 7) Then
                        Erreor = New LDCOMCARGAErrores()
                        Erreor.Hoja = "Meta"
                        Erreor.Fila = vFila
                        Erreor.Descripcion = "La columna de Período en la fila " & vFila & " tiene formato incorrecto. Asegurese de tener formato AAAA-DD"
                        ListaErrores.Add(Erreor)
                        CabeceraCorrecta = False
                        'Throw New Exception("La columna de Período en la fila " & vFila & " tiene formato incorrecto. Asegurese de tener formato AAAA-DD")
                    End If

                    ' Throw New Exception("La columna de Período en la fila " & vFila & " es incorrecta.")
                End If



                If IsDBNull(vDataRow("Descripción")) Then
                    Erreor = New LDCOMCARGAErrores()
                    Erreor.Hoja = "Meta"
                    Erreor.Fila = vFila
                    Erreor.Descripcion = "La columna de Descripción es incorrecta."
                    If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                        ListaErrores.Add(Erreor)

                    End If
                    CabeceraCorrecta = False
                    'Throw New Exception("La columna de Descripcion en la fila " & vFila & " es incorrecta.")
                End If



                Dim CodMetaCabecera As Integer = IIf(IsDBNull(vDataRow("Código de Meta")), 0, vDataRow("Código de Meta"))
                Dim PeriodoNombre As String = IIf(IsDBNull(vDataRow("Período")), "", vDataRow("Período"))
                Dim Descripcion As String = IIf(IsDBNull(vDataRow("Descripción")), "", vDataRow("Descripción"))
                Dim FechaIni As Date
                Dim FechaFin As Date


                Dim VerificaCatMezcla As Boolean = False
                Dim CatObligatotias As Boolean = True
                Dim CumplePorcentaje As Double = 0
                Dim periodoCorrecto As Boolean = True


                Dim _QueryPer As New TQuery(CreaTransaccion.Conexion)
                _QueryPer.Selected(New TField("F_RefDate"))
                _QueryPer.Selected(New TField("T_RefDate"))
                _QueryPer.From(New TFrom("OFPR"))
                _QueryPer.Where(New TField("Name"), OperadoresFiltros.Igual, New TValue(PeriodoNombre))

                If _QueryPer.Open Then
                    recset.DoQuery(_QueryPer.SQL)
                    If recset.RecordCount > 0 Then
                        recset.MoveFirst()
                        FechaIni = recset.Fields().Item("F_RefDate").Value
                        FechaFin = recset.Fields().Item("T_RefDate").Value

                    Else
                        Erreor = New LDCOMCARGAErrores()
                        Erreor.Hoja = "Meta"
                        Erreor.Fila = vFila
                        Erreor.Descripcion = "Error al obtener el período, verifique el formato. (AAAA-MM)"
                        periodoCorrecto = False
                        CabeceraCorrecta = False
                        If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                            ListaErrores.Add(Erreor)

                        End If
                        valorInvalido = True

                    End If
                End If

                If CabeceraCorrecta Then
                    ItemCabecera = New LDCOMCabecera()
                    ItemCabecera.Codigo_Meta = CodMetaCabecera
                    ItemCabecera.Periodo_Nombre = PeriodoNombre
                    ItemCabecera.Periodo = PeriodoNombre
                    ItemCabecera.Fecha_Inicio = FechaIni
                    ItemCabecera.Fecha_Fin = FechaFin
                    ItemCabecera.Descripcion = Descripcion
                    ListaCabecera.Add(ItemCabecera)
                End If








                Dim categoriaMultiple As Integer = 0
                Dim listaCodProp As New ArrayList
                Dim lineaMezcla As Integer = 2


                For index = 0 To vTabla_Mezcla.Rows.Count - 1
                    Dim exito As Boolean = True
                    Dim ArrayCategPeriodo(1) As String
                    Dim ErrCodArt As Boolean = False
                    Dim pDesc As String = ""
                    Dim CodigoPropiedad As String = ""
                    Dim ErrTipoCat As Boolean = False
                    'Dim TipoCat As Integer
                    Dim ErrDesc As Boolean = False
                    Dim DescripcionDetalle As String = ""
                    Dim MontoMeta As Double = IIf(IsDBNull(vTabla_Mezcla.Rows(index).Item("Monto Meta")), 0, vTabla_Mezcla.Rows(index).Item("Monto Meta"))
                    Dim detallefoco As String = 0
                    Dim PorcentajeMeta As Double = IIf(IsDBNull(vTabla_Mezcla.Rows(index).Item("Porcentaje Meta")), 0, vTabla_Mezcla.Rows(index).Item("Porcentaje Meta"))
                    Dim pFoco As String = ""
                    Dim CodDetalle As Integer = IIf(IsDBNull(vTabla_Mezcla.Rows(index).Item("Código Meta")), -1, vTabla_Mezcla.Rows(index).Item("Código Meta"))
                    Dim CodArtMezc As String = IIf(IsDBNull(vTabla_Mezcla.Rows(index).Item("Código o Propiedad")), "-1", vTabla_Mezcla.Rows(index).Item("Código o Propiedad"))
                    Dim TipoCat As Integer = IIf(IsDBNull(vTabla_Mezcla.Rows(index).Item("Tipo Categoría")), -1, vTabla_Mezcla.Rows(index).Item("Tipo Categoría"))
                    Dim validFoco As String = IIf(IsDBNull(vTabla_Mezcla.Rows(index).Item("Foco")), "-1", vTabla_Mezcla.Rows(index).Item("Foco"))

                    If CodDetalle = -1 And TipoCat = -1 And CodArtMezc = "-1" And validFoco = "-1" And MontoMeta = 0 And PorcentajeMeta = 0 Then
                        Erreor = New LDCOMCARGAErrores()
                        Erreor.Hoja = "Mezcla"
                        Erreor.Fila = lineaMezcla
                        Erreor.Descripcion = "Error en la línea."
                        If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                            ListaErrores.Add(Erreor)
                        End If
                        GoTo NextIteration
                    End If

                    If CodDetalle = -1 Then
                        Erreor = New LDCOMCARGAErrores()
                        Erreor.Hoja = "Mezcla"
                        Erreor.Fila = lineaMezcla
                        Erreor.Descripcion = "La columna de Tipo Código Meta es incorrecta."
                        If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                            ListaErrores.Add(Erreor)
                        End If
                        'ErrCodeMet = True
                        exito = False
                        valorInvalido = True
                        'Throw New Exception("La columna de Tipo Categoría en la fila " & vFilaMezcla & " es incorrecta.")
                    End If

                    If Not IsNumeric(TipoCat) Then
                        Erreor = New LDCOMCARGAErrores()
                        Erreor.Hoja = "Mezcla"
                        Erreor.Fila = lineaMezcla
                        Erreor.Descripcion = "La columna de Tipo Categoría es incorrecta."
                        If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                            ListaErrores.Add(Erreor)
                        End If
                        ErrTipoCat = True
                        exito = False
                        valorInvalido = True
                        'Throw New Exception("La columna de Tipo Categoría en la fila " & vFilaMezcla & " es incorrecta.")
                    End If


                    If Not ErrTipoCat And TipoCat <> -1 Then


                        If (Integer.Parse(TipoCat) >= 0 And Integer.Parse(TipoCat) < 4) Then
                            Dim _QueryTpoCat As New TQuery(CreaTransaccion.Conexion)


                            If CodArtMezc = "-1" Then

                                Dim Desc As String = "La columna de Código o Propiedad en la fila " & lineaMezcla & " es incorrecta."
                                Dim queryErrorExiste = From vError As LDCOMCARGAErrores In ListaErrores
                                Where vError.Hoja = "Mezcla" And vError.Descripcion = Desc
                                Select vError

                                If queryErrorExiste.Count = 0 Then
                                    Erreor = New LDCOMCARGAErrores()
                                    Erreor.Hoja = "Mezcla"
                                    Erreor.Fila = lineaMezcla
                                    Erreor.Descripcion = Desc
                                    ListaErrores.Add(Erreor)
                                    exito = False
                                    'Throw New Exception("Error al cargar el grupo de artículos, Código " & Cod & " es incorrecto.")
                                End If



                            Else
                                CodigoPropiedad = CodArtMezc

                                'Throw New Exception("La columna de Código o Propiedad en la fila " & vFilaMezcla & " es incorrecta.")
                            End If


                            If Integer.Parse(vTabla_Mezcla.Rows(index).Item("Tipo Categoría")) = 0 Then



                                Dim Cod As String = CodArtMezc
                                _QueryTpoCat.Selected(New TField("ItmsGrpNam"))
                                _QueryTpoCat.From(New TFrom("OITB"))
                                _QueryTpoCat.Where(New TField("ItmsGrpCod"), OperadoresFiltros.Igual, New TValue(Cod))

                                If _QueryTpoCat.Open Then
                                    recset.DoQuery(_QueryTpoCat.SQL)
                                    If recset.RecordCount > 0 Then
                                        recset.MoveFirst()
                                        pDesc = recset.Fields().Item("ItmsGrpNam").Value
                                        _QueryTpoCat.Clear()
                                    Else
                                        Dim Desc As String = "El registro no existe."
                                        'Dim queryErrorExiste = From vError As LDCOMCARGAErrores In ListaErrores
                                        'Where vError.Hoja = "Mezcla" And vError.Descripcion = Desc
                                        'Select vError

                                        'If queryErrorExiste.Count = 0 Then
                                        Erreor = New LDCOMCARGAErrores()
                                        Erreor.Hoja = "Mezcla"
                                        Erreor.Fila = lineaMezcla
                                        Erreor.Descripcion = Desc
                                        If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                            ListaErrores.Add(Erreor)
                                        End If
                                        exito = False
                                        'Throw New Exception("Error al cargar el grupo de artículos, Código " & Cod & " es incorrecto.")
                                        'End If



                                    End If

                                End If

                            ElseIf Integer.Parse(vTabla_Mezcla.Rows(index).Item("Tipo Categoría")) = 3 Then

                                Dim Cod As String = vTabla_Mezcla.Rows(index).Item("Código o Propiedad").ToString()
                                _QueryTpoCat.Selected(New TField("ItemName"))
                                _QueryTpoCat.From(New TFrom("OITM"))
                                _QueryTpoCat.Where(New TField("ItemCode"), OperadoresFiltros.Igual, New TValue(Cod))

                                If _QueryTpoCat.Open Then
                                    recset.DoQuery(_QueryTpoCat.SQL)
                                    If recset.RecordCount > 0 Then
                                        recset.MoveFirst()
                                        pDesc = recset.Fields().Item("ItemName").Value
                                        _QueryTpoCat.Clear()

                                    Else

                                        Dim Desc As String = "El registro no existe."
                                        'Dim queryErrorExiste = From vError As LDCOMCARGAErrores In ListaErrores
                                        'Where vError.Hoja = "Mezcla" And vError.Descripcion = Desc
                                        'Select vError

                                        'If queryErrorExiste.Count = 0 Then
                                        Erreor = New LDCOMCARGAErrores()
                                        Erreor.Hoja = "Mezcla"
                                        Erreor.Fila = lineaMezcla
                                        Erreor.Descripcion = Desc
                                        If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                            ListaErrores.Add(Erreor)

                                        End If
                                        exito = False
                                        'Throw New Exception("Error al cargar el artículo Códido " & Cod & ". por favor verifique la existencia de este artículo.")
                                        'End If



                                    End If

                                End If

                            ElseIf Integer.Parse(vTabla_Mezcla.Rows(index).Item("Tipo Categoría")) = 2 Then

                                pDesc = ""

                            End If

                        ElseIf Integer.Parse(vTabla_Mezcla.Rows(index).Item("Tipo Categoría")) > 3 And Integer.Parse(vTabla_Mezcla.Rows(index).Item("Tipo Categoría")) <= 6 Then
                            CodigoPropiedad = TipoCat

                        ElseIf Integer.Parse(vTabla_Mezcla.Rows(index).Item("Tipo Categoría")) > 6 Then
                            Erreor = New LDCOMCARGAErrores()
                            Erreor.Hoja = "Mezcla"
                            Erreor.Fila = lineaMezcla
                            Erreor.Descripcion = "La columna de Tipo Categoría no puede ser mayor a 6."
                            If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                ListaErrores.Add(Erreor)

                            End If
                            exito = False
                            valorInvalido = True



                        End If

                    End If

                    'If Not IsNumeric(vTabla_Mezcla.Rows(index).Item("Tipo Categoría")) Then
                    '    Erreor = New LDCOMCARGAErrores()
                    '    Erreor.Hoja = "Mezcla"
                    '    Erreor.Fila = lineaMezcla
                    '    Erreor.Descripcion = "La columna de Tipo Categoría es incorrecta."
                    '    If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                    '        ListaErrores.Add(Erreor)

                    '    End If
                    '    exito = False
                    '    valorInvalido = True

                    'End If


                    'If CodArtMezc = "-1" Then
                    '    Erreor = New LDCOMCARGAErrores()
                    '    Erreor.Hoja = "Mezcla"
                    '    Erreor.Fila = lineaMezcla
                    '    Erreor.Descripcion = "El Código o Propiedad es incorrecto"

                    '    If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                    '        ListaErrores.Add(Erreor)

                    '    End If
                    '    valorInvalido = True
                    '    exito = False

                    'End If



                    If CodMetaCabecera = (vTabla_Mezcla.Rows(index).Item("Código Meta")) Then


                        If Not IsNumeric(vTabla_Mezcla.Rows(index).Item("Porcentaje Meta")) Then
                            Erreor = New LDCOMCARGAErrores()
                            Erreor.Hoja = "Mezcla"
                            Erreor.Fila = lineaMezcla
                            Erreor.Descripcion = "La columna de Porcentaje Meta en la fila " & lineaMezcla.ToString() & " es incorrecta."
                            If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                ListaErrores.Add(Erreor)
                            End If
                            valorInvalido = True
                            exito = False

                        Else

                            If vTabla_Mezcla.Rows(index).Item("Porcentaje Meta") > 0 Then
                                CumplePorcentaje += vTabla_Mezcla.Rows(index).Item("Porcentaje Meta")
                            Else
                                Erreor = New LDCOMCARGAErrores()
                                Erreor.Hoja = "Mezcla"
                                Erreor.Fila = lineaMezcla
                                Erreor.Descripcion = "El porcentaje de la linea " + lineaMezcla.ToString() + " debe ser mayor a cero"
                                ListaErrores.Add(Erreor)
                                valorInvalido = True
                                exito = False
                            End If

                        End If

                        'If IsDBNull(vTabla_Mezcla.Rows(index).Item("Monto Meta")) Then
                        '    Erreor = New LDCOMCARGAErrores()
                        '    Erreor.Hoja = "Mezcla"
                        '    Erreor.Fila = lineaMezcla
                        '    Erreor.Descripcion = "La columna de Monto Meta en la fila es incorrecta."
                        '    If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                        '        ListaErrores.Add(Erreor)

                        '    End If
                        '    valorInvalido = True
                        'End If

                        If Not IsNumeric(vTabla_Mezcla.Rows(index).Item("Monto Meta")) Then
                            Erreor = New LDCOMCARGAErrores()
                            Erreor.Hoja = "Mezcla"
                            Erreor.Fila = lineaMezcla
                            Erreor.Descripcion = "La columna de Monto Meta es incorrecta."
                            If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                ListaErrores.Add(Erreor)
                            End If
                            exito = False
                            valorInvalido = True

                        Else
                            If vTabla_Mezcla.Rows(index).Item("Monto Meta") <= 0 Then

                                Erreor = New LDCOMCARGAErrores()
                                Erreor.Hoja = "Mezcla"
                                Erreor.Fila = lineaMezcla
                                Erreor.Descripcion = "La columna de Monto Meta de la linea " + lineaMezcla.ToString() + " debe ser mayor a 0."
                                If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                    ListaErrores.Add(Erreor)
                                End If
                                valorInvalido = True
                                exito = False
                            End If


                        End If




                        Select Case vTabla_Mezcla.Rows(index).Item("Tipo Categoría")
                            Case 4
                                CatObligatotias = True
                                categoriaMultiple += 1
                                If ExisteVentaTotal = False Then
                                    ExisteVentaTotal = True

                                    'Else
                                    ' Throw New Exception("La categoria 4 ya existe para la meta " + CodMetaCabecera.ToString())
                                End If
                            Case 5
                                CatObligatotias = True
                                categoriaMultiple += 1
                                If ExisteCobro = False Then
                                    ExisteCobro = True
                                    'Else
                                    'Erreor = New LDCOMCARGAErrores()
                                    'Erreor.Hoja = "Mezcla"
                                    'Erreor.Fila = vFilaMezcla
                                    'Erreor.Descripcion = "La categoria 5 ya existe para la meta " + CodMetaCabecera.ToString()
                                    'ListaErrores.Add(Erreor)
                                    'exito = False
                                    '' Throw New Exception("La categoria 5 ya existe para la meta " + CodMetaCabecera.ToString())
                                End If

                        End Select

                        If CodArtMezc <> "-1" And Integer.Parse(vTabla_Mezcla.Rows(index).Item("Tipo Categoría")) <> 6 Then


                            Dim queryArtExiste = From Mezcla As Array In listaCodProp
                            Where Mezcla(0) = CodArtMezc And Mezcla(1) = CodDetalle
                            Select Mezcla

                            If queryArtExiste.Count > 0 Then



                                Erreor = New LDCOMCARGAErrores()
                                Erreor.Hoja = "Mezcla"
                                Erreor.Fila = lineaMezcla
                                Erreor.Descripcion = "El código o propiedad " & vTabla_Mezcla.Rows(index).Item("Código o Propiedad").ToString() & " está duplicado en la meta " & CodMetaCabecera
                                If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                    ListaErrores.Add(Erreor)
                                End If
                                valorInvalido = True
                                exito = False

                            Else
                                ArrayCategPeriodo(0) = CodArtMezc
                                ArrayCategPeriodo(1) = CodMetaCabecera
                                listaCodProp.Add(ArrayCategPeriodo)

                            End If
                        End If

                        If IsDBNull((vTabla_Mezcla.Rows(index).Item("Foco"))) Then

                            Erreor = New LDCOMCARGAErrores()
                            Erreor.Hoja = "Mezcla"
                            Erreor.Fila = lineaMezcla
                            Erreor.Descripcion = "La columna de foco es incorrecta."
                            If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                ListaErrores.Add(Erreor)
                            End If
                            exito = False
                            valorInvalido = True
                            'Throw New Exception("La columna de foco en la fila " & vFilaMezcla & " es incorrecta.")
                        ElseIf (vTabla_Mezcla.Rows(index).Item("Foco").ToString().ToUpper() <> "N" And vTabla_Mezcla.Rows(index).Item("Foco").ToString().ToUpper() <> "S") Then

                            Erreor = New LDCOMCARGAErrores()
                            Erreor.Hoja = "Mezcla"
                            Erreor.Fila = lineaMezcla
                            Erreor.Descripcion = "La columna de foco es incorrecta. debe ser S o N"
                            If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                ListaErrores.Add(Erreor)
                            End If
                            exito = False
                            valorInvalido = True
                        ElseIf (vTabla_Mezcla.Rows(index).Item("Foco").ToString().ToUpper() = "N" Or vTabla_Mezcla.Rows(index).Item("Foco").ToString().ToUpper() = "S") Then
                            pFoco = vTabla_Mezcla.Rows(index).Item("Foco").ToString().ToUpper()

                            'Throw New Exception("La columna de foco en la fila " & vFilaMezcla & " es incorrecta.")
                        End If


                        If Not IsNumeric(vTabla_Mezcla.Rows(index).Item("Porcentaje Meta")) Then
                            Erreor = New LDCOMCARGAErrores()
                            Erreor.Hoja = "Mezcla"
                            Erreor.Fila = lineaMezcla
                            Erreor.Descripcion = "La columna de Porcentaje Meta es incorrecta."
                            If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                ListaErrores.Add(Erreor)
                            End If
                            exito = False
                            valorInvalido = True

                        End If



                        If ErrDesc = False Then
                            DescripcionDetalle = pDesc
                        End If



                        detallefoco = IIf(pFoco = "S", "Y", "N")




                        If exito Then
                            ItemDetalleMezcla = New LDCOMDetalle_Mezcla()

                            ItemDetalleMezcla.Tipo = TipoCat
                            ItemDetalleMezcla.CodArt = CodigoPropiedad
                            ItemDetalleMezcla.Descripcion = DescripcionDetalle
                            ItemDetalleMezcla.Monto = MontoMeta
                            ItemDetalleMezcla.Foco = detallefoco
                            ItemDetalleMezcla.Porcentaje = PorcentajeMeta
                            ItemDetalleMezcla.codMeta = CodDetalle
                            ItemDetalleMezcla.Agregado = False
                            ListaDetalleMezcla.Add(ItemDetalleMezcla)
                        End If



                    End If
NextIteration:

                    lineaMezcla += 1

                Next
                Dim contadorFilaAgente As Integer = 2
                For index = 0 To vTabla_Agente.Rows.Count - 1
                    Dim flagCodMetaAgente = True
                    Dim vFilaAgente As Integer = 2

                    Dim Separador As String = ""
                    Dim ExitoAgente As Boolean = True

                    Dim CodAgente As String = ""
                    Dim NombreAgente As String = ""

                    If Not (IsDBNull(vTabla_Agente.Rows(index).Item("Código Meta"))) Then

                        If CodMetaCabecera = (vTabla_Agente.Rows(index).Item("Código Meta")) Then

                            If Not IsNumeric(vTabla_Agente.Rows(index).Item("Código Meta")) Then
                                Erreor = New LDCOMCARGAErrores()
                                Erreor.Hoja = "Agente"
                                Erreor.Fila = contadorFilaAgente
                                Erreor.Descripcion = "La columna de Código Meta es incorrecta."
                                If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                    ListaErrores.Add(Erreor)
                                End If
                                valorInvalido = False
                                flagCodMetaAgente = True
                                ExitoAgente = False
                            End If


                            If (IsDBNull(vTabla_Agente.Rows(index).Item("Código Agente"))) Then
                                Erreor = New LDCOMCARGAErrores()
                                Erreor.Hoja = "Agente"
                                Erreor.Fila = contadorFilaAgente
                                Erreor.Descripcion = "La columna de Código Agente es incorrecta."
                                If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                    ListaErrores.Add(Erreor)
                                End If
                                valorInvalido = True
                                ExitoAgente = False
                            Else
                                If flagCodMetaAgente And periodoCorrecto Then
                                    Dim valCalc = ValidarOtrosCalculos(vTabla_Agente.Rows(index).Item("Código Agente"), FechaIni, FechaFin, -1, CodMetaCabecera, ListaErrores, contadorFilaAgente)
                                    If valCalc <> "" Then
                                        valorInvalido = True
                                    End If
                                End If

                            End If

                            Dim CodMetaAgente As Integer = IIf(IsDBNull(vTabla_Agente.Rows(index).Item("Código Meta")), 0, vTabla_Agente.Rows(index).Item("Código Meta"))



                            CodAgente = IIf(IsDBNull(vTabla_Agente.Rows(index).Item("Código Agente")), "-1", vTabla_Agente.Rows(index).Item("Código Agente"))

                            If CodMetaAgente = CodMetaCabecera Then


                                Separador = ","

                                NombreAgente = obtenerNombreAgente(CodAgente, CodMetaAgente)
                                If NombreAgente = "-1" And CodAgente <> "-1" Then
                                    Erreor = New LDCOMCARGAErrores()
                                    Erreor.Hoja = "Agente"
                                    Erreor.Fila = contadorFilaAgente
                                    Erreor.Descripcion = "El agente " & CodAgente.ToString() & " de la meta " + CodMetaAgente.ToString() & " no existe"
                                    If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                        ListaErrores.Add(Erreor)
                                    End If
                                    ExitoAgente = False

                                Else


                                    If ExitoAgente Then


                                        If (From A In ListaAgente Where A.Codigo_Meta = CodMetaAgente And A.Codigo_Agente = CodAgente).Count() > 0 Then

                                            Erreor = New LDCOMCARGAErrores()
                                            Erreor.Hoja = "Agente"
                                            Erreor.Fila = contadorFilaAgente
                                            Erreor.Descripcion = "El agente " & CodAgente & " esta duplicadado en la meta " & CodMetaAgente
                                            If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                                                ListaErrores.Add(Erreor)
                                            End If
                                            valorInvalido = True

                                        Else
                                            objAgente = New LDCOMAgente()
                                            objAgente.Codigo_Agente = CodAgente
                                            objAgente.Nombre_Agente = NombreAgente
                                            objAgente.Codigo_Meta = CodMetaAgente
                                            ListaAgente.Add(objAgente)
                                        End If


                                    End If

                                End If

                            End If
                            vFilaAgente += 1



                        End If

                    Else

                        Erreor = New LDCOMCARGAErrores()
                        Erreor.Hoja = "Agente"
                        Erreor.Fila = contadorFilaAgente
                        Erreor.Descripcion = "La columna de Código Meta es incorrecta."
                        If Not ListaErrores.Contains(New LDCOMCARGAErrores(Erreor.Hoja, Erreor.Fila, Erreor.Descripcion)) Then
                            ListaErrores.Add(Erreor)
                        End If
                        valorInvalido = False

                    End If

                    contadorFilaAgente += 1

                Next




                If ExisteVentaTotal = False Then
                    Erreor = New LDCOMCARGAErrores()
                    Erreor.Hoja = "Mezcla"
                    Erreor.Fila = 0
                    Erreor.Descripcion = "La meta " + CodMetaCabecera.ToString() + " no tiene asociado la categoría de ventas alcanzadas"
                    ListaErrores.Add(Erreor)
                    CatObligatotias = False
                    ' Throw New Exception("La meta " + CodMetaCabecera.ToString() + " no tiene asociado la categoria de ventas alcanzadas")
                End If

                If ExisteCobro = False Then
                    Erreor = New LDCOMCARGAErrores()
                    Erreor.Hoja = "Mezcla"
                    Erreor.Fila = 0
                    Erreor.Descripcion = "La meta " + CodMetaCabecera.ToString() + " no tiene asociado la categoría de Cobro"
                    ListaErrores.Add(Erreor)
                    CatObligatotias = False
                    ' Throw New Exception("La meta " + CodMetaCabecera.ToString() + "no tiene asociado la categoria de Cobro")
                End If

                If CumplePorcentaje < 100 Then

                    Erreor = New LDCOMCARGAErrores()
                    Erreor.Hoja = "Mezcla"
                    Erreor.Fila = 0
                    Erreor.Descripcion = "La meta " + CodMetaCabecera.ToString() + " no cumple con el 100%  del porcentaje requerido"
                    ListaErrores.Add(Erreor)


                End If

                If categoriaMultiple > 2 Then
                    Erreor = New LDCOMCARGAErrores()
                    Erreor.Hoja = "Mezcla"
                    Erreor.Fila = 0
                    Erreor.Descripcion = "La Categoría 4 o 5 no puede existir más de una vez en la meta " & CodMetaCabecera.ToString() & "."
                    ListaErrores.Add(Erreor)
                    valorInvalido = True

                End If


                valorInvalido = False
                vFila += 1
            Next


            If ListaAgente.Count() > 0 And ListaDetalleMezcla.Count() > 0 And ListaCabecera.Count() > 0 And ListaErrores.Count = 0 Then




                For Each vCabecera As LDCOMCabecera In ListaCabecera
                    Dim oServiceOrigen As SAPbobsCOM.GeneralService

                    Dim sCmp As SAPbobsCOM.CompanyService

                    Dim oChild As SAPbobsCOM.GeneralData
                    Dim oChildAgente As SAPbobsCOM.GeneralData
                    Dim ChildrenDetalleMezcla As SAPbobsCOM.GeneralDataCollection
                    Dim ChildrenDetalleAgente As SAPbobsCOM.GeneralDataCollection
                    Dim oGeneralDataOrigen As SAPbobsCOM.GeneralData


                    sCmp = SBOLDObjeto.Company.GetCompanyService

                    oServiceOrigen = sCmp.GetGeneralService("LDT_UST_COM_METAS")

                    oGeneralDataOrigen = oServiceOrigen.GetDataInterface(SAPbobsCOM.GeneralServiceDataInterfaces.gsGeneralData)
                    oGeneralDataOrigen.SetProperty("U_LDT_UDF_Descrip", vCabecera.Descripcion)
                    oGeneralDataOrigen.SetProperty("U_LDT_UDF_NomPeriodo", vCabecera.Periodo_Nombre)
                    oGeneralDataOrigen.SetProperty("U_LDT_UDF_PerInicio", vCabecera.Fecha_Inicio)
                    oGeneralDataOrigen.SetProperty("U_LDT_UDF_PerFinal", vCabecera.Fecha_Fin)
                    oGeneralDataOrigen.SetProperty("U_LDT_UDF_CodePeriodo", vCabecera.Periodo)

                    ChildrenDetalleMezcla = oGeneralDataOrigen.Child("LDT_UST_COM_MEZCLA")
                    ChildrenDetalleAgente = oGeneralDataOrigen.Child("LDT_UST_COM_MT_AG")

                    For Each vMezcla As LDCOMDetalle_Mezcla In (From A In ListaDetalleMezcla Where A.codMeta = vCabecera.Codigo_Meta)


                        oChild = ChildrenDetalleMezcla.Add()
                        oChild.SetProperty("U_LDT_UDF_TipoCat", vMezcla.Tipo)
                        oChild.SetProperty("U_LDT_UDF_CodOProp", vMezcla.CodArt)
                        oChild.SetProperty("U_LDT_UDF_Descripcion", vMezcla.Descripcion)
                        oChild.SetProperty("U_LDT_UDF_MontoMeta", vMezcla.Monto)
                        oChild.SetProperty("U_LDT_UDF_Foco", vMezcla.Foco)
                        oChild.SetProperty("U_LDT_UDF_PorcMeta", vMezcla.Porcentaje)
                        vMezcla.Agregado = True

                    Next


                    For Each vAgente As LDCOMAgente In (From A In ListaAgente Where A.Codigo_Meta = vCabecera.Codigo_Meta)

                        oChildAgente = ChildrenDetalleAgente.Add()
                        oChildAgente.SetProperty("U_LDT_UDF_Cod_Agente", vAgente.Codigo_Agente)
                        oChildAgente.SetProperty("U_LDT_UDF_Nom_Agente", vAgente.Nombre_Agente)

                    Next




                    oGeneralParamsOrigen = oServiceOrigen.Add(oGeneralDataOrigen)
                    MetaCreadaExito = True
                    Dim DocEntry = oGeneralParamsOrigen.GetProperty("DocEntry")
                    If DocEntry > 0 Then
                        InsertaCalc(DocEntry)
                    Else
                        Throw New Exception("Error al insertar los cálculos")

                    End If


                    System.Runtime.InteropServices.Marshal.ReleaseComObject(oServiceOrigen)
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(oGeneralDataOrigen)

                    oGeneralDataOrigen = Nothing
                    oServiceOrigen = Nothing
                    GC.Collect()
                Next



            End If

            If MetaCreadaExito = True Then
                SBOLDObjeto.SBO_Application.StatusBar.SetSystemMessage("Importado con éxito", SAPbouiCOM.BoMessageTime.bmt_Short, SAPbouiCOM.BoStatusBarMessageType.smt_Success)
            End If

            vDatosConn.Close()
            vDatosConn.Dispose()
            vDatosExcelCabecera.Dispose()
            vDatosExcelDetalleMezcla.Dispose()
            vDatosExcelDetalleAgente.Dispose()
            vDatosConn = Nothing
            GC.Collect()

            If ListaErrores.Count > 0 Then
                FormaCreada = SBOLDObjeto.CreateForm("LDCOMLOG", SAPbouiCOM.BoFormMode.fm_OK_MODE)

                llenarGridErrores(FormaCreada, ListaErrores)
            End If

        Catch ex As Exception
            If ListaErrores.Count > 0 Then
                FormaCreada = SBOLDObjeto.CreateForm("LDCOMLOG", SAPbouiCOM.BoFormMode.fm_OK_MODE)
                llenarGridErrores(FormaCreada, ListaErrores)
                GC.Collect()
            End If
            Throw New Exception(ex.Message)
        End Try

        Return ""
    End Function

以上是关于csharp 阅读Excel文件的主要内容,如果未能解决你的问题,请参考以下文章

csharp Excel阅读器

csharp 阅读Excel

csharp Excel文件构造函数C#

csharp Excel文件构造函数C#NET Core

csharp 读取Excel文件并插入带有序列化的List

csharp 例如-CSHARP-GroupDocs.AssemblyExamples-GenerateReport-GenerateBulletedListFromJsoninOpenExcel.c