F#的Excel Range.Sort失败或重新排列列(F# Excel Range.Sort Fa

2019-07-02 13:25发布

我有两种情况。 初步代码:

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

这将导致重新排列我的专栏,但我没有看到任何逻辑的重排。 上述列进行排序。

请告诉我,我做错了什么。

Answer 1:

我还没有想通了,为什么第一排序尝试不起作用。 但是我检查出的文档在第二排序。 使用命名参数和删除所有,但必要的参数,我想出了以下内容:

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。



Answer 2:

第一个排序不工作,因为你可能想排序表由位于AH,(通过设置XlYesNoGuess.xlYes财产头部判断)。 在这种情况下,你只能使用排序“ 排序自上而下 ”(xlSortColumns)。

您还可以通过在Excel中第一个尝试这种说服自己,看看有什么选项可供选择:
1)选择范围要应用排序(例如,你的情况“A7:我” +行)
2)单击“数据”菜单 - >“排序和筛选”任务窗格 - >排序
3)添加/通过使用“添加级别” /“删除级别”按钮删除列/行
4)然后,你可以选择任何你想要的级别,然后单击“选项...”按钮,你会看到你可用“排序选项”。
你会发现,在一个表的情况下,你将有只有一个“方向”,这是“排序自上而下”可用的选项

xlSortColumns -各种各样的列(行的意思排序基于这些列)

xlSortRows -按行(列意味着基于这些行排序)



文章来源: F# Excel Range.Sort Fails or Rearranges Columns