Сортировка в Excel по нескольким столбцам с помощью Powershell - PullRequest
0 голосов
/ 10 января 2019

Я сортирую электронную таблицу Excel, используя powershell. Я получаю те же результаты, открываю ли я существующую электронную таблицу или создаю ее на лету.

Следующий код для сортировки всего листа в столбце А. отлично работает.

$xl = New-Object -ComObject excel.application
$xl.Visible = $True
$xlwb = $xl.Workbooks.Open("E:\test.xlsx",1) 
$xlws = $xlwb.Worksheets.Item("Sheet1")
$xlws.Activate()

$last = $xlws.UsedRange.SpecialCells(11).Address($False,$False)
$range1 = $xlws.Range("A1")
$range2 = $xlws.Range("A1:$last")
$range2.Sort($range1,1)

$xlwb.Save()
$xl.Quit() 

Для сортировки по нескольким столбцам (например, А и В), исходя из моих исследований, кажется, что принятая мудрость заключается в том, чтобы сделать что-то вроде следующего. Когда я это делаю, я не получаю ошибок, но столбцы не сортируются.

$xlSortOnValues = 0
$xlPinYin = 1
$xlTopToBottom = 1
$xlAscending = 1
$xlDescending = 2
$xlNo = 2
$xlYes = 1

$xl = New-Object -ComObject excel.application
$xl.Visible = $True
$xlwb = $xl.Workbooks.Open("E:\test.xlsx",1) 
$xlws = $xlwb.Worksheets.Item("Sheet1")
$xlws.Activate()

$last = $xlws.UsedRange.SpecialCells(11).Address($False,$False)
$range1 = $xlws.Range("A1")
$range2 = $xlws.Range("B1")
$range3 = $xlws.Range("A1:$last")

$xlws.Sort.SortFields.Clear()
$xlws.Sort.Header = $xlNo
$xlws.Sort.Orientation = $xlTopToBottom
$xlws.Sort.SortFields.Add($range1, $xlSortOnValues, $xlAscending, $xlPinYin)
$xlws.Sort.SortFields.Add($range2, $xlSortOnValues, $xlAscending, $xlPinYin)
$xlws.Sort.SetRange($range3)
$xlws.Sort.Apply

$xlwb.Save()
$xl.Quit()

Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...