Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Сортировка листа EXCEL


Автор: igor87 8.6.2014, 18:59
Добрый день!

Необходимо сделать сортировку по двум полям: по первому сортировать по алфавиту, по второму по заданному списку.
Делаю следующее
Код

' добавляю список, в соответствии с которым нужно отсортировать
excelApp.AddCustomList(orderArray)
' получаю индекс необходимого списка
orderIndex = excelApp.GetCustomListNum(orderArray)

а вот непосредственно сортировку пробовал сделать как сразу по двум полям:
Код

sortRange.Sort(Key1:=sortRange.Range("B2"), Order1:=Microsoft.Office.Interop.Excel.XlSortOrder.xlAscending,
               Key2:=sortRange.Range("B3"), OrderCustom:=orderIndex,
               Orientation:=Microsoft.Office.Interop.Excel.XlSortOrientation.xlSortRows)

так и по очереди:
Код

sortRange.Sort(Key1:=sortRange.Range("B3"),
               OrderCustom:=orderIndex, MatchCase:=False,
               Orientation:=Microsoft.Office.Interop.Excel.XlSortOrientation.xlSortRows)

sortRange.Sort(Key1:=sortRange.Range("B2"), Order1:=Microsoft.Office.Interop.Excel.XlSortOrder.xlAscending,
               MatchCase:=False, Orientation:=Microsoft.Office.Interop.Excel.XlSortOrientation.xlSortRows)

В обоих случаях сортировка первого уровня(по B2) по алфавиту идёт нормально, а вот для второго(B3) список "не работает" ни в первом, ни во втором случае и сортировка второго уровня, как и первого, происходит по алфавиту.

Добавление списка в AddCustomList происходит нормально, проверял.

Автор: diadiavova 8.6.2014, 19:38
Цитата(igor87 @  8.6.2014,  19:59 Найти цитируемый пост)
и сортировка второго уровня, как и первого, происходит по алфавиту

Я не сильно шарю в экселе, но могу предположить, что возможно проблема в том, что ячейкам, которые хочешь отсортировать надо задать формат. Скорей всего по умолчанию сортируется как текст, но если задашь числовой формат, то будет сортироваться как числа, задашь дату... ну идея понятна я думаю. А так вообще это вопрос скорее для раздела программирования под офис, так что переношу тему туда.

Автор: igor87 8.6.2014, 22:17
Попробовал добавить выставление формата ячеек. Формат ячейки первого уровня(B2) сортировки числовой, второго(B3) - текстовый. Сортировка по второму варианту: сначала по B3, потом по B2. В результате без изменений: по B2 всё, как и прежде, верно - сортировка от минимального до максимального значения; по B3 всё также сортировка по алфавиту вместо заданного порядка в OrderCustom.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)