Поделиться через


Практическое руководство. Программная сортировка данных на листах Excel

Обновлен: Июль 2008

Применение

Сведения в данном разделе относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office.

Тип проекта

  • Проекты уровня документа

  • Проекты уровня приложения

Версия Microsoft Office

  • Excel 2003

  • Excel 2007

Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов.

Во время выполнения можно сортировать данные, хранящиеся на листе в диапазонах и списках. Чтобы отсортировать диапазон из нескольких столбцов с именем Fruits сначала по первому столбцу, а затем по второму, используйте приведенный ниже код.

При использовании Visual Studio, начиная с версии 2008, пакет обновления 1 (SP1), можно сортировать данные в надстройках уровня приложения во время выполнения.

Сортировка данных в настройке уровня документа

Чтобы отсортировать данные в элементе управления NamedRange, выполните указанные ниже действия.

  • Вызовите метод Sort элемента управления NamedRange. В следующем примере кода требуется, чтобы на листе был элемент управления NamedRange с именем Fruits. Данный код необходимо поместить в класс листа, а не в класс ThisWorkbook.

    Me.Fruits.Sort( _
        Key1:=Me.Fruits.Columns(1), Order1:=Excel.XlSortOrder.xlAscending, _
        Key2:=Me.Fruits.Columns(2), Order2:=Excel.XlSortOrder.xlAscending, _
        Orientation:=Excel.XlSortOrientation.xlSortColumns, _
        Header:=Excel.XlYesNoGuess.xlNo, _
        SortMethod:=Excel.XlSortMethod.xlPinYin, _
        DataOption1:=Excel.XlSortDataOption.xlSortNormal, _
        DataOption2:=Excel.XlSortDataOption.xlSortNormal, _
        DataOption3:=Excel.XlSortDataOption.xlSortNormal)
    
    this.Fruits.Sort(
        this.Fruits.Columns[1, missing], Excel.XlSortOrder.xlAscending,
        this.Fruits.Columns[2, missing], missing, Excel.XlSortOrder.xlAscending,
        missing, Excel.XlSortOrder.xlAscending,
        Excel.XlYesNoGuess.xlNo, missing, missing, 
        Excel.XlSortOrientation.xlSortColumns,
        Excel.XlSortMethod.xlPinYin,
        Excel.XlSortDataOption.xlSortNormal,
        Excel.XlSortDataOption.xlSortNormal,
        Excel.XlSortDataOption.xlSortNormal); 
    

Чтобы отсортировать данные в элементе управления ListObject, необходимо поместить следующий код в Sheet1.vb или Sheet1.cs. В данном примере предполагается, что на листе Sheet1 имеется элемент управления Microsoft.Office.Tools.Excel.ListObject с именем fruitList.

Сортировка данных в элементе управления ListObject

  • Вызовите метод Sort свойства Range элемента управления ведущего приложения ListObject.

    Me.fruitList.Range.Sort( _
        Key1:=Me.fruitList.ListColumns(1).Range, Order1:=Excel.XlSortOrder.xlAscending, _
        Key2:=Me.fruitList.ListColumns(2).Range, Order2:=Excel.XlSortOrder.xlAscending, _
        Orientation:=Excel.XlSortOrientation.xlSortColumns, _
        Header:=Excel.XlYesNoGuess.xlYes)
    
    this.fruitList.Range.Sort(
        this.fruitList.ListColumns[1].Range, Excel.XlSortOrder.xlAscending,
        this.fruitList.ListColumns[2].Range, missing, Excel.XlSortOrder.xlAscending,
        missing, Excel.XlSortOrder.xlAscending, 
        Excel.XlYesNoGuess.xlYes, missing, missing, 
        Excel.XlSortOrientation.xlSortColumns,
        Excel.XlSortMethod.xlPinYin, 
        Excel.XlSortDataOption.xlSortNormal,
        Excel.XlSortDataOption.xlSortNormal,
        Excel.XlSortDataOption.xlSortNormal);
    

Сортировка данный в надстройке уровня приложения

Сортировка данных в собственном диапазоне

  • Следует вызвать метод Sort собственного элемента управления Excel Microsoft.Office.Interop.Excel.Range. В следующем примере кода требуется, чтобы на листе был собственный элемент управления Excel с именем Fruits.

    Dim Fruits As Excel.Range = Me.Application.Range("A1", "B2")
    Fruits.Sort( _
        Key1:=Fruits.Columns(1), Order1:=Excel.XlSortOrder.xlAscending, _
        Key2:=Fruits.Columns(2), Order2:=Excel.XlSortOrder.xlAscending, _
        Orientation:=Excel.XlSortOrientation.xlSortColumns, _
        Header:=Excel.XlYesNoGuess.xlNo, _
        SortMethod:=Excel.XlSortMethod.xlPinYin, _
        DataOption1:=Excel.XlSortDataOption.xlSortNormal, _
        DataOption2:=Excel.XlSortDataOption.xlSortNormal, _
        DataOption3:=Excel.XlSortDataOption.xlSortNormal)
    
    Excel.Range Fruits = Application.get_Range("A1", "B3");
        Fruits.Sort(
        Fruits.Columns[1, missing], Excel.XlSortOrder.xlAscending,
        Fruits.Columns[2, missing], missing, Excel.XlSortOrder.xlAscending,
        missing, Excel.XlSortOrder.xlAscending,
        Excel.XlYesNoGuess.xlNo, missing, missing,
        Excel.XlSortOrientation.xlSortColumns,
        Excel.XlSortMethod.xlPinYin,
        Excel.XlSortDataOption.xlSortNormal,
        Excel.XlSortDataOption.xlSortNormal,
        Excel.XlSortDataOption.xlSortNormal); 
    

Сортировка данных в элементе управления ListObject

  • Следует вызвать метод Sort свойства Range собственного элемента управления Excel Microsoft.Office.Interop.Excel.ListObject. Следующий пример кода предполагает наличие на активном листе собственного элемента управления Excel Microsoft.Office.Interop.Excel.ListObject с именем fruitList.

    Dim fruitList As Excel.ListObject = CType(Application.ActiveSheet,  _
        Excel.Worksheet).ListObjects.AddEx(Excel.XlListObjectSourceType.xlSrcRange, _
        Application.Range("A1", "B2"))
    fruitList.Range.Sort( _
    Key1:=fruitList.ListColumns(1).Range, Order1:=Excel.XlSortOrder.xlAscending, _
    Key2:=fruitList.ListColumns(2).Range, Order2:=Excel.XlSortOrder.xlAscending, _
    Orientation:=Excel.XlSortOrientation.xlSortColumns, _
    Header:=Excel.XlYesNoGuess.xlYes)
    
    Excel.ListObject fruitList = 
         ((Excel.Worksheet)Application.ActiveSheet).
             ListObjects.Add(Microsoft.Office.Interop.Excel.XlListObjectSourceType.xlSrcRange,
             Application.get_Range("A1", "B3"), 
             missing, Microsoft.Office.Interop.Excel.XlYesNoGuess.xlNo, missing); 
        fruitList.Range.Sort(
            fruitList.ListColumns[1].Range, Excel.XlSortOrder.xlAscending,
            fruitList.ListColumns[2].Range, missing, Excel.XlSortOrder.xlAscending,
            missing, Excel.XlSortOrder.xlAscending,
            Excel.XlYesNoGuess.xlYes, missing, missing,
            Excel.XlSortOrientation.xlSortColumns,
            Excel.XlSortMethod.xlPinYin,
            Excel.XlSortDataOption.xlSortNormal,
            Excel.XlSortDataOption.xlSortNormal,
            Excel.XlSortDataOption.xlSortNormal);
    

См. также

Задачи

Практическое руководство. Автоматическое заполнение диапазонов данными, значения которых изменяются с постоянным шагом

Практическое руководство. Ссылки на диапазоны листов в коде

Практическое руководство. Применение стилей к диапазонам в рабочих книгах

Основные понятия

Работа с листами

Элемент управления NamedRange

Элемент управления ListObject

Общие сведения о необязательных параметрах в решениях Office

Журнал изменений

Дата

Журнал

Причина

Июль 2008

Добавлен пример кода, который можно использовать в надстройке уровня приложения.

Обратная связь от клиента.