我该如何优化此代码

时间:2013-11-12 13:10:01

标签: vb.net

使用发明者Ilogic(基于VB),我想根据图纸名称选择一个Excel单元格。 因此,当图形名称在0001结束时,它应该采用单元格B1。 当图形名称以0002结尾时,它应该采用单元格B2,依此类推。

这是我现在拥有的代码,但我需要将其扩展到aprox 50,这应该能够以更清洁的方式:

Select Case name
Case "62-31-SD-0001"
    Parameter("31-W00.ipt.MP_Length") = GoExcel.CellValue("31-W00.xls", "Blad1", "B1")
Case "62-31-SD-0002"    
    Parameter("31-W00.ipt.MP_Length") = GoExcel.CellValue("31-W00.xls", "Blad1", "B2")
Case "62-31-SD-0003"
    Parameter("31-W00.ipt.MP_Length") = GoExcel.CellValue("31-W00.xls", "Blad1", "B3")
Case "62-31-SD-0004"    
    Parameter("31-W00.ipt.MP_Length") = GoExcel.CellValue("31-W00.xls", "Blad1", "B4")
End Select

任何人都可以帮助我更有效地解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

如果我能正确理解你的问题,你应该能够做到这一点:

Parameter("31-W00.ipt.MP_Length") = 
    GoExcel.CellValue("31-W00.xls", "Blad1", "B"&Integer.Parse(Right(name, 4)))

首先从名称中取出最后四个字符,然后从数字的开头删除0,然后最后将它与B连接。

答案 1 :(得分:1)

这样的事情应该简化案例

Sub Main()
    Console.WriteLine("Parameter(""31-W00.ipt.MP_Length"") = GoExcel.CellValue(""31-W00.xls"", ""Blad1"", ""B{0}"")", B_Something("62-31-SD-0004"))
    Console.ReadKey()
End Sub

Public Function B_Something(ByVal something As String) As String
    Return Integer.Parse(something.Substring(something.Length - 4)).ToString

    'or
    'Return something.Substring(something.Length - 4).TrimStart(New Char() {"0"c})
End Function

答案 2 :(得分:1)

考虑存储字符串值的XLParms类的字典或列表,然后

  Private myCol as New Dictionary(of String, XLParms)

   For each kvp as KeyValuePair in myCol
     Parameter(kvp.Value.Parameter) = _
          GoExcel.CellValue(kvp.Value.XLFile, _
            kvp.Value.Something, kvp.Value.XLCell)
  Next kvp

作为列表,只需在for / next循环中使用它。这取决于你是否有时只需要其中的一些东西(然后使用字典来拉出ParamerName所需的字典)。可以序列化或保存List / Dictionary值本身,这样就不会在代码中填充所有代码。