【问题标题】:To sort across multiple columns in Excel using C#使用 C# 对 Excel 中的多个列进行排序
【发布时间】:2012-04-19 04:58:23
【问题描述】:

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

【问题讨论】:

    标签: excel c#-4.0 office-interop


    【解决方案1】:

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

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

    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# 代码...

    【讨论】:

    • 谢谢迈克。我能够将其应用于我的 C# 代码。效果很好。
    猜你喜欢
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2016-11-21
    相关资源
    最近更新 更多