Bom Dia. Eu odeio incomodar vocês, mas encontrei um problema que realmente me confundiu.
Eu tenho o arquivo Excel onde tenho 2 colunas onde devo dividir 1 coluna por outra e inserir este resultado na tabela SQL.
Aqui está o instantâneo do arquivo excel, onde sublinhei a linha do problema.
Se os valores em ambas as colunas têm "," como em outras linhas, então está tudo bem, mas se eu tiver "," e outro não, então eu obtenho o resultado errado. Por exemplo, o compilador leu o 147 como 147,0 {duplo} e 60,75 gostam "60,75" {String}. Se tudo estiver bem, devo obter o resultado 2,41, mas obtive 0,024 (é como se 60,75 fosse convertido para 6075). Infelizmente, não posso modificar o arquivo do Excel. Como posso obter o resultado correto?
Aqui está o código para divisão:
Dim usedRange = xlsWorkSheet.Range("E7", "F57")
Dim usedRangeAs2DArray As Object(,) = usedRange.Value2
Dim TeamIndex(), import As String
ReDim TeamIndex(usedRange.Rows.Count)
For i As Integer = 1 To usedRange.Rows.Count
If (usedRangeAs2DArray(i, 1) = 0 And usedRangeAs2DArray(i, 2) = 0)
Or usedRangeAs2DArray(i, 2) = 0 Then
z = 1
TeamIndex(i) = z
Else
g = Convert.ToString(usedRangeAs2DArray(i, 1))
z = g / Convert.ToDouble(usedRangeAs2DArray(i, 2))
z = Math.Floor(100 * z) / 100
TeamIndex(i) = z
End If
Next
Tentei usar Convert.ToString (), use Replace "." com "," e String.Format ("{0: N2}", g) na primeira coluna, mas isso se aproxima simplesmente ignorado.
Agradeço antecipadamente.
Respostas:
0 para resposta № 1Acho que não achei muito bonito, masno entanto, solução de trabalho para este problema. A ideia principal se eu tiver um valor inteiro, sem "," que é lido pelo compilador como tipo {Double}, eu simplesmente acrescento a string ", 00" a esse valor. Aqui está meu código modificado.
Dim usedRange = xlsWorkSheet.Range("E7", "F57")
Dim usedRangeAs2DArray As Object(,) = usedRange.Value2
Dim TeamIndex(), import As String
ReDim TeamIndex(usedRange.Rows.Count)
For i As Integer = 1 To usedRange.Rows.Count
If (usedRangeAs2DArray(i, 1) = 0 And usedRangeAs2DArray(i, 2) = 0)
Or usedRangeAs2DArray(i, 2) = 0 Then
z = 1
TeamIndex(i) = z
Else
If TypeOf usedRangeAs2DArray(i, 1) Is System.Double Then
usedRangeAs2DArray(i, 1) = String.Concat(usedRangeAs2DArray(i, 1), ",00")
End If
If TypeOf usedRangeAs2DArray(i, 2) Is System.Double Then
usedRangeAs2DArray(i, 2) = String.Concat(usedRangeAs2DArray(i, 2), ",00")
End If
z = usedRangeAs2DArray(i, 1) / usedRangeAs2DArray(i, 2)
z = Math.Floor(100 * z) / 100
TeamIndex(i) = z
End If
Next
ATUALIZAR: Melhor solução encontrada, converta ambos os valores para Double e substitua "," por ".".
Aqui está o código para isso:
Dim fDD, sDD As Double
If IsNumeric(usedRangeAs2DArray(i, 2)) And IsNumeric(usedRangeAs2DArray(i, 1)) Then
fDD = CDbl(usedRangeAs2DArray(i, 1).ToString().Replace(",", "."))
sDD = CDbl(usedRangeAs2DArray(i, 2).ToString().Replace(",", "."))
End If
z = fDD / sDD
z = Math.Floor(100 * z) / 100
TeamIndex(i) = z