使用C#使用小计函数后以编程方式在Excel中排序数据

时间:2013-12-31 19:29:21

标签: c# excel sorting excel-interop subtotal

我有要将小计函数应用于的数据,然后按降序对结果数据进行排序。到目前为止,我已经设法让我的代码应用小计函数,然后更改视图,以便它只显示我想要排序的列。我无法弄清楚如何在此时使用.Sort方法只对可见数据进行排序。

我实现小计的代码:

xcel.Range range = excelWorksheet.UsedRange;
        range.Subtotal(1, Excel.XlConsolidationFunction.xlSum, Type.Missing, (object)true, (object)false, Excel.XlSummaryRow.xlSummaryBelow);

我的代码将视图更改为我想要排序的列:

excelWorksheet.Outline.ShowLevels(2, Type.Missing);

此时我已尝试使用.Sort方法的许多变体,只使用我能想到的所有范围(可见范围,明确说明我想要的列,整个工作表,小计过滤器之前使用的范围,小计过滤器后使用的范围)。我也尝试在Excel中录制宏,但我无法弄清楚如何将其转换回C#。

完全符合我需要的Excel宏是:

Range("G3").Select
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("G3"), _
    SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
    .SetRange Range("A2:G2853")
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

有没有人知道在应用小计分组后如何对数据进行排序?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,但我只是拿了宏(与你的非常相似),我试图将它与Excel方法排序。以下对我有用:

     range.Sort(Key1: range.Columns[8], Order1: ExcelM.XlSortOrder.xlDescending,
                Header: ExcelM.XlYesNoGuess.xlYes,MatchCase: false,
                Orientation: ExcelM.XlSortOrientation.xlSortColumns,
                SortMethod:ExcelM.XlSortMethod.xlPinYin
                );