早上好。我讨厌打扰你们,但我遇到的问题确实困扰了我。
我有Excel文件,其中我有2列,我必须将1列分成另一列,并将此结果插入SQL表。
以下是excel文件的快照,其中我为问题行加下划线。
如果两列中的值都有“,”,就像其他行一样,那么一切都很好,但如果1有“,”而另一列没有,那么我得到错误的结果。 例如,编译器读取147像 147.0 {Double} 和60,75,如“60,75”{String} 。如果一切都很好,我应该得到结果2,41,但我得到0,024(就像60,75被转换为6075)。不幸的是我无法修改Excel文件。我怎样才能得到正确的结果?
以下是除法的代码:
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
我尝试使用Convert.ToString(),使用Replace“。”在第一列上加上“,”和String.Format(“{0:N2}”,g),但这种方法只是被忽略了。
提前谢谢。
答案 0 :(得分:0)
我想我发现不是很漂亮,但仍然可以解决这个问题。 主要的想法,如果我有整数值,没有“,”由编译器作为类型{Double},我简单地将“,”00“字符串附加到此值。 这是我修改过的代码。
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
<强>更新强> 找到更好的解决方案,将两个值都转换为Double,并将“,”替换为“。”。
以下是此代码:
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