Сортировка Excel по 4 колонкам с использованием Python (с использованием win32com?) - PullRequest
0 голосов
/ 09 января 2019

Я пытался отсортировать электронную таблицу по 4 колонкам. Используя win32com, мне удалось отсортировать по 3 столбцам, используя следующий код:

excel = win32com.client.Dispatch("Excel.Application")

wb= excel.Workbooks.Open('.xlsx')
ws= wb.worksheets[0]

ws.Range(D6:D110).Sort(Key1=ws.Range('D1'), Order1=1, Key2=ws.Range('E1'), Order2=2, Key3=ws.Range('G1'), Order3=3, Orientation=1)

Однако, когда я пытаюсь добавить Key4, он говорит, что Key4 - неожиданный аргумент ключевого слова. Функция Range.Sort ограничена только 3 клавишами? Есть ли способ добавить 4-й?

Может быть, есть другой способ сделать это с помощью панд или openpyxl?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 10 января 2019

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

xlAscending = 1
xlSortColumns = 1
xlYes = 1

ws.Range(D6:D110).Sort(Key1=ws.Range('D1'), Order1=xlAscending, 
                       Key2=ws.Range('E1'), Order2=xlAscending, 
                       Key3=ws.Range('G1'), Order3=xlAscending, 
                       header=xlYes, Orientation=xlSortColumns)

# FOURTH SORT KEY (ADJUST TO NEEDED COLUMN)
ws.Range(D6:D110).Sort(Key1=ws.Range('H1'), Order1=xlAscending,
                       header=xlYes, Orientation=xlSortColumns)

Кстати, ваши номера заказов должны быть только 1, 2 или -4135 для констант xlSortOrder .

0 голосов
/ 09 января 2019

Попробуйте прочитать в листе Excel, а затем сортировать по именам заголовков. Это предполагает, что ваш лист Excel отформатирован правильно, как CSV.

import pandas as pd
df = pd.read_excel('filename.xlsx')
df = df.sort_values(['key1','key2','key3','key4'], axis=1)
df.to_excel('filename2.xlsx')
...