2013-05-07 2 views
0

Я хотел бы перевести этот макрос Python 2.7,Vba Sort.SetRange в Python win32com (Excel)

Sheets("Données CENTRE").Select 
Columns("A:G").Select 
    Application.CutCopyMode = False 
    ActiveWorkbook.Worksheets("Données CENTRE").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("Données CENTRE").Sort.SortFields.Add Key:=Range("A2:A4644" _ 
     ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    ActiveWorkbook.Worksheets("Données CENTRE").Sort.SortFields.Add Key:=Range("B2:B4644" _ 
     ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    ActiveWorkbook.Worksheets("Données CENTRE").Sort.SortFields.Add Key:=Range("C2:C4644" _ 
     ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    ActiveWorkbook.Worksheets("Données CENTRE").Sort.SortFields.Add Key:=Range("D2:D4644" _ 
     ), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Données CENTRE").Sort 
     .SetRange Range("A1:G4644") 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 

Однако последняя часть дает мне headeach, согласно документации SortRange Эксел suposed для вызова только объектов Sort.

но питон говорит мне: Отсортировать экземпляр не имеет вызова метода

вот как я перевел:

ws = wb.Sheets("Données Centre") 
ws.Columns("A:G").Select 
ws.Sort.SortFields.Clear() 
ws.Sort.SortFields.Add(Key=ws.Range("A2:A4644"), 
         SortOn=constants.xlSortOnValues, 
         Order=constants.xlAscending, 
         DataOption=constants.xlSortNormal) 

ws.Sort.SortFields.Add(Key=ws.Range("B2:B4644"), 
          SortOn=constants.xlSortOnValues, 
          Order=constants.xlAscending, 
          DataOption=constants.xlSortNormal) 

ws.Sort.SortFields.Add(Key=ws.Range("C2:C4644"), 
         SortOn=constants.xlSortOnValues, 
         Order=constants.xlAscending, 
         DataOption=constants.xlSortNormal) 

ws.Sort.SortFields.Add(Key=ws.Range("D2:D4644"), 
         SortOn=constants.xlSortOnValues, 
         Order=constants.xlAscending, 
         DataOption=constants.xlSortNormal) 

ws.Sort(Header=constants.xlYes, 
     MatchCase=False, 
     Orientation=constants.xlTopToBottom, 
     SortMethod=constants.xlPinYin).SetRange(ws.Range("A1:G4644")).Apply() 

Я совершенно потерял

ответ

0

Наконец нашел, как:

ws.Range("A1:G4644").Sort(Key1=ws.Range("A1:G4644"), 
          Header=constants.xlYes, 
          MatchCase=False, 
          Orientation=constants.xlTopToBottom, 
          SortMethod=constants.xlPinYin)