如何获得总行数,但是当这个值在一个特定的列中重复的行不应该使用vb.net计算

我想知道Excel中的行数,但是如果值在“A”列中重复,则不应计数。

ABC aa 1 1 bb 2 2 aa 3 3 cc 4 4 bb 5 5 Total=3 Total=5 Total=5 

你需要一些统计不同实体的方法。 HashSet可以很好地工作:

HashSet类提供了高性能的集合操作。 集合是不包含重复元素的集合,其元素没有特定的顺序。

所有需要做的事情是查看每个列中的每个值,并将其添加到哈希集(如果它不在那里),然后计算哈希集中的条目数:

 Option Infer On Option Strict On Imports Microsoft.Office.Interop Imports System.Text Public Class Form1 Sub ShowDistinctColumnValueCounts(xlFile As String) Dim xl = New Excel.Application Dim wb As Excel.Workbook = xl.Workbooks.Open(xlFile) Dim ws As Excel.Worksheet = DirectCast(wb.Worksheets(1), Excel.Worksheet) Dim nCols = ws.UsedRange.Columns.Count Dim nRows = ws.UsedRange.Rows.Count Dim vals = DirectCast(ws.Range(ws.Cells(1, 1), ws.Cells(nRows, nCols)).Value, Object(,)) wb.Close() xl.Quit() Dim sb As New StringBuilder For col = 1 To nCols Dim hs As New HashSet(Of Object) For row = 1 To nRows If Not hs.Contains(vals(row, col)) Then hs.Add(vals(row, col)) End If Next sb.AppendLine($"Col {col} has {hs.Count} distinct entries") Next TextBox1.Text = sb.ToString() End Sub Sub DoStuff() Dim src = "C:\temp\test.xlsx" ShowDistinctColumnValueCounts(src) GC.Collect() GC.WaitForPendingFinalizers() GC.Collect() GC.WaitForPendingFinalizers() End Sub Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load DoStuff() End Sub End Class 

用你的样本数据(我认为“A”,“B”和“C”是列名,而不是条目),输出:

Col 1有3个不同的条目
Col 2有5个不同的条目
专栏3有5个不同的条目

其他参考: 使用VB.NET处理Excel COM对象的正确方法?