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 例如-CSHARP-GroupDocs.AssemblyExamples-GenerateReport-GenerateBulletedListFromJsoninOpenExcel.c