2015-12-13 5 views
1

Я пытаюсь сортировать диапазон ячеек в Python с использованием win32com:Сортировать диапазон ячеек, win32com.client

enter image description here

код Я использую это:

sheet.Range("A1:B8").Sort(Key1=sheet.Range("B1"), Orientation=constants.xlAscending) 

который работает. Он сортирует диапазон ячеек во второй колонке:

enter image description here

Когда я хочу, это сортировать по убыванию вместо возрастания:

sheet.Range("B8:A1").Sort(Key1=sheet.Range("B1"), Orientation=constants.xlDescending) 

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

enter image description here

Я играл с тонной различных параметров типа SOT метода сортировки here но ничего не похоже на работу. Имеет ли кто-нибудь опыт работы с этим методом и может предложить, как бы получить сортировку второго столбца?

ответ

2

Ваш аргумент ориентации должен быть либо: xlSortColumns = 1, либо xlSortRows = 2. См. Ниже Настройка скрипта Python. Как показывает Range.Sort Method, Заказ1, order2 и Order3 принимает xlAscending = 1 или xlDescending = 2 значения.

import win32com.client 

wbk = 'C:\\Path\\To\\Workbook.xlsx' 

xlApp = win32com.client.Dispatch("Excel.Application") 
xlApp.Workbooks.Open(wbk) 

xlAscending = 1 
xlSortColumns = 1  
xlApp.Sheets(1).Columns("A:B").Sort(Key1=xlApp.Sheets(1).Range("B1"), 
            Order1=xlAscending, Orientation=xlSortColumns) 

xlApp.Quit 
xlApp = None         
+0

Это замечательно Parfait. Это дает мне в основном то, что я хочу, за одним исключением. Мне нужен диапазон ячеек, в отличие от целых столбцов, поэтому, принимая ваше предложение, вместо xl.App.Columns («A: B») я заменил xlApp.Range («A1: G9») – Mike

Смежные вопросы