1

我需要使用 C# 对 Excel 中的多个列进行排序。我正在使用 Microsoft.Office.Interop.Excel 来执行此操作。但是 Range.Sort 只允许我对三列进行排序。我想对超过三列进行排序?有没有办法可以使用 Excel.Range.Sort 方法对超过三列进行排序?

4

1 回答 1

2

在 Excel 2007 之前,您仅限于 3 个排序键 -Range.Sort不会让您使用更多。如果那是您的目标版本,那么您需要发挥创意:有几个可能的想法是将数据拉入您的 C# 代码并在那里对其进行排序,或者构建一个包含连接键的额外工作表列,然后Sort照常应用。

如果您只使用 Excel 2007 或更高版本,则可以使用更灵活的排序功能:Worksheet.Sort. 我在其中构建了一个 30x10 的随机数表,A1:J30并记录了一个按前五列排序的宏。这就是我得到的(在对代码进行了一些清理和重复数据删除之后):

With ActiveWorkbook.Worksheets("Sheet1").Sort
    With .SortFields
        .Clear
        .Add Key:=Range("A1:A30"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Add Key:=Range("B1:B30"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Add Key:=Range("C1:C30"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Add Key:=Range("D1:D30"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Add Key:=Range("E1:E30"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    End With
    .SetRange Range("A1:J30")
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

这应该很容易应用于您的 C# 代码......

于 2012-04-19T08:01:27.250 回答