使用Powershell在Excel上的多列上排序

时间:2019-01-10 11:09:42

标签: excel powershell sorting excel-automation

我正在使用Powershell对Excel电子表格进行排序。无论是打开现有电子表格还是即时创建电子表格,我都会得到相同的结果。

下面的代码可以对A列上的整个工作表进行排序。

$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() 

根据我的研究,要在多个列(例如A和B)上进行排序,公认的智慧似乎是在执行以下操作。当我这样做时,我没有收到任何错误,但是列没有排序。

$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()

我在做什么错?

0 个答案:

没有答案