F#Excel范围。排序失败或重新排列列

F#Excel范围。排序失败或重新排列列,f#,vsto,excel-2010,excel-interop,F#,Vsto,Excel 2010,Excel Interop,我有两个箱子。初步代码: open Microsoft.Office.Interop.Excel let xl = ApplicationClass() xl.Workbooks.OpenText(fileName...) let wb = xl.Workbooks.Item(1) let ws = wb.ActiveSheet :?> Worksheet let rows = string ws.UsedRange.Rows.Count 首先,我尝试以下方法进行排序: ws.Sor

我有两个箱子。初步代码:

open Microsoft.Office.Interop.Excel

let xl = ApplicationClass()
xl.Workbooks.OpenText(fileName...)
let wb = xl.Workbooks.Item(1)
let ws = wb.ActiveSheet :?> Worksheet

let rows = string ws.UsedRange.Rows.Count
首先,我尝试以下方法进行排序:

ws.Sort.SortFields.Clear()
ws.Sort.SortFields.Add(xl.Range("A8:A" + rows), XlSortOn.xlSortOnValues, XlSortOrder.xlAscending, XlSortDataOption.xlSortNormal) |> ignore
ws.Sort.SortFields.Add(xl.Range("H8:H" + rows), XlSortOn.xlSortOnValues, XlSortOrder.xlAscending, XlSortDataOption.xlSortNormal) |> ignore
ws.Sort.SetRange(xl.Range("A7:I" + rows))
ws.Sort.Header <- XlYesNoGuess.xlYes
ws.Sort.MatchCase <- false
ws.Sort.Orientation <- XlSortOrientation.xlSortRows
ws.Sort.SortMethod <- XlSortMethod.xlPinYin
ws.Sort.Apply()
ws.Range("A7:I" + rows).Sort(xl.Range("A8:A" + rows), XlSortOrder.xlAscending,
                             xl.Range("H8:H" + rows), "", XlSortOrder.xlAscending,
                             "", XlSortOrder.xlAscending, XlYesNoGuess.xlYes,
                             XlSortOrientation.xlSortRows) |> ignore
这导致我的列被重新排列,尽管我看不到任何重新排列的逻辑。并且这些行没有排序


请告诉我我做错了什么。

我还没有弄清楚为什么第一次排序尝试不起作用。但我在第二种情况下退房了。使用命名参数并删除除必要参数以外的所有参数,我得出以下结论:

ws.Range("A8:H" + rows).Sort(Key1=xl.Range("A8:A" + rows), Key2=xl.Range("H8:H" + rows),
                             Orientation=XlSortOrientation.xlSortColumns) |> ignore

默认方向为xlSortRows。我将其解释为对行进行排序,这是Excel在手动排序时所做的正常、默认、直观的排序。哦,不是。如果您想要Excel在手动排序时所做的常规、默认、直观排序,请指定xlSortColumns。

第一次排序不起作用,因为您可能正在尝试对表进行排序(根据属性标题设置为XlYesNoGuess.xlYes)通过位于AH上的列。在这种情况下,只能使用“从上到下排序”(xlSortColumns)进行排序

您还可以先在Excel中尝试一下,看看有哪些选项可用:
1) 选择要应用排序的范围(例如,在“A7:I”+行的情况下)
2) 单击“数据”菜单->“排序和筛选”任务窗格->排序
3) 使用“添加级别”/“删除级别”按钮添加/删除列/行
4) 然后,您可以选择所需的级别并单击“选项…”按钮,您将看到可用的“排序选项”。
您会注意到,在表格的情况下,“方向”只有一个可用选项,即“从上到下排序”

xlSortColumns-按列排序(意味着根据这些列对行进行排序)

xlSortRows-按行排序(表示列根据这些行排序)