gpt4 book ai didi

vb.net - 从范围内的单元格中读取所有唯一值并从中创建一个逗号分隔的字符串?

转载 作者:行者123 更新时间:2023-12-04 21:38:01 25 4
gpt4 key购买 nike

我编写了以下函数来从一个范围内的单元格中读取所有唯一值并从中创建一个逗号分隔的字符串?有没有更好、更简单的方法来做到这一点?

Private Sub CsvUniqueValues(r As Excel.Range)
Dim c As Excel.Range
Dim s As String = ""

For Each c In r.Cells
If ExcelApp.WorksheetFunction.CountIf(r, c.Value) = 1 Then
s = s & ","
End If
Next

If s.Length > 0 Then
s = s.Substring(0, s.Length - 1)
End If

End Sub

最佳答案

您可以使用 LINQ 获取仅包含唯一值的列表,如下所示:

Dim uniqueValues As IEnumerable = r.Cells.Where(Function(x) ExcelApp.WorksheetFunction.CountIf(r, x.Value) = 1))

然后,您可以使用 LINQ 将所有这些唯一值转换为字符串:
Dim uniqueStrings As IEnumerable(Of String) = uniqueValues.Select(Of String)(Function(x) x.ToString())

然后您可以使用 LINQ 将结果列表转换为数组:
Dim uniqueArray() As String = uniqueStrings.ToArray()

然后,您可以使用 String.Join将它们组合成单个 CSV 字符串的方法:
Dim csv As String = String.Join(",", uniqueArray)

当然,您可以在一个命令中完成所有这些操作,如下所示:
Dim csv As String = String.Join(",", 
r.Cells.Where(Function(x) ExcelApp.WorksheetFunction.CountIf(r, x.Value) = 1))
.Select(Of String)(Function(x) x.ToString())
.ToArray())

但是,问题是您是否会称其为“更容易”。 LINQ 很有用,因为它使代码更易于阅读和编写,但是当它用得太远时,它可能变得不那么可读,从而违背了使用它的目的。至少,为了让你的代码更清晰,我会将第一部分移到一个命名函数中,这样它就更能自我记录:
Public Function GetUniqueCellValuesAsString(r As Excel.Range) As IEnumerable(Of String)
Return r.Cells.Where(
Function(x) ExcelApp.WorksheetFunction.CountIf(r, x.Value) = 1))
.Select(Of String)(Function(x) x.ToString())
End Function

然后你可以像这样构建 CSV 字符串:
Dim csv As String = String.Join(",", GetUniqueCellValuesAsString(r).ToArray())

关于vb.net - 从范围内的单元格中读取所有唯一值并从中创建一个逗号分隔的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29010825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com