将列表框号与另一个列表框(VB.net)对应组合

时间:2015-02-26 20:03:05

标签: vb.net excel

用文字解释很难,但我会试试。 我正在尝试阅读excel表并将其放入列表框中。一行是名称,另一行是属于名称的数字。

示例:

  • James | 100
  • 克里斯| 20
  • 亚历| 50
  • 詹姆斯| 30
  • 凯特| 60
  • 克里斯| 80

左侧是listbox1,右侧是listbox2。 我想把这些数字相互结合起来。排序,所以它会这样结束:

  • 詹姆斯| 130
  • 克里斯| 100
  • 凯特| 60
  • 亚历| 50

我试过了,但似乎无法编写解决方案。有人知道该怎么办吗?

到目前为止,这是我的代码:

For intLoopCounter = 1 To CInt(objXLWs.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row)
            Try
                objRange = objXLWs.Range("I" & intLoopCounter)
                ListBox1.Items.Add(objRange.Value)
                objRange = objXLWs.Range("F" & intLoopCounter)
                ListBox2.Items.Add(objRange.Value)
            Catch ex As Exception
            End Try
        Next intLoopCounter

1 个答案:

答案 0 :(得分:0)

也许从excel读取名称到Dictionary对象?然后,如果名称已经存在,您只需将之前的值添加到新值中即可获得总值。然后,您可以遍历所有键并将Key的值放在列表框中。

Dim nameValDict as new Dictionary(of Object, Object)
Dim count as Integer = CInt(objXLWs.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell).Row)
For i = 1 to count
    Dim name = objRange = objXLWs.Range("I" & count )
    Dim val = objXLWs.Range("F" & count )
    if nameValDict.containsKey(name) then
        nameValDict.item(name) += val
    Else
        nameValDict.add(name, val)
    end If
Next

For each item in nameValDict.keys
    ListBox.Items.add(String.format("{0}|{1}", item, nameValDict.item(item)))
Next

P.S。如果你有option strict on并且我没有实际测试它,因为我的家用机器上没有excel,这段代码可能无效。我只是使用了你的excel位。