0

我需要按列 a 升序,然后 b 升序,然后 d 升序和按列 e 升序,然后 f 升序,然后 h 升序排序。仅使用 QTP,我似乎无法让 Excel 对数据进行正确排序。

我想要的是:

表格1:
| 一个 | 乙 | c | d | 电子| f | 克 | h |
-------------------------------------------------- ------------------
| 1 | 是 | 空白 | 51 东西 | 1 | 是 | 空白 | 51 东西 |
| 1 | 是 | 空白 | 100 个东西 | 1 | 是 | 空白 | 100 个东西 |
| 1 | 成为一个 | 空白 | 121 东西 | 1 | 成为一个 | 空白 | 121 东西 |
| 1 | 成为一个 | 空白 | 200 东西 | 1 | 成为一个 | 空白 | 200 东西 |
| 2 | 东南亚 | 空白 | 5 东西 | 1 | 东南亚 | 空白 | 5 东西 |

我得到的是:

表 2:
| 一个 | 乙 | c | d | 电子| f | 克 | h |
-------------------------------------------------- ------------------
| 1 | 是 | 空白 | 100 个东西 | 1 | 成为一个 | 空白 | 121 东西 |
| 1 | 是 | 空白 | 51 东西 | 1 | 成为一个 | 空白 | 200 东西 |
| 1 | 成为一个 | 空白 | 121 东西 | 1 | 是 | 空白 | 100 个东西 |
| 1 | 成为一个 | 空白 | 200 东西 | 1 | 是 | 空白 | 51 东西 |
| 2 | 东南亚 | 空白 | 5 东西 | 1 | 东南亚 | 空白 | 5 东西 |

e 到 h 列首先被填充和排序。通常,这些列的单元格按表 1 中所示的正确排序顺序填充。但是,也有排序顺序不正确的情况,但这种情况很少见。也许 100,000 次尝试中有 1 次会填充未排序的数据。

a 到 d 列最后被填充和排序。这些列的单元格以某种随意的方式填充。表 3 说明了一个非常简单的最终结果,没有强制进行排序。

表3:
| 一个 | 乙 | c | d | 电子| f | 克 | h |
-------------------------------------------------- ------------------
| 1 | 是 | 空白 | 100 个东西 | 1 | 是 | 空白 | 51 东西 |
| 1 | 是 | 空白 | 51 东西 | 1 | 是 | 空白 | 100 个东西 |
| 1 | 成为一个 | 空白 | 121 东西 | 1 | 成为一个 | 空白 | 121 东西 |
| 1 | 成为一个 | 空白 | 200 东西 | 1 | 成为一个 | 空白 | 200 东西 |
| 2 | 东南亚 | 空白 | 5 东西 | 1 | 东南亚 | 空白 | 5 东西 |

让 QTP 和 Excel 返回表 1 中显示的结果的最佳方法是什么?有没有办法?

我正在使用的代码片段:

'Some Code Stuff here which leads to exporting the worksheet

rangeOne = "E1:H" & totalRowCnt
Set rangeObj = worksheetOne.Range(rangeOne)
Set range1 = excel1Obj.Range("E1")
Set range2 = excel1Obj.Range("F1")
Set range3 = excel1Obj.Range("H1")
rangeObj.Sort range1, ascend1, range2, ,ascend1, range3, ,ascend1,yes1

'Save worksheet then import sorted data back into Datatable 
'and add more Code Stuff here which leads to exporting the worksheet again

rangeOne = "A1:D" & totalRowCnt
Set rangeObj = worksheetOne.Range(rangeOne)
Set range1 = excel1Obj.Range("A1")
Set range2 = excel1Obj.Range("B1")
Set range3 = excel1Obj.Range("D1")
rangeObj.Sort range1, ascend1, range2, ,ascend1, range3, ,ascend1,yes1

'Save worksheet then end script
4

1 回答 1

0

尝试将数据加载到Recordset对象中。您可以像这样对记录集进行排序:

rs.Sort = "a ASC, b ASC, d ASC, e ASC, f ASC, h ASC"

然后将排序后的数据复制到 Excel 或将它们写入 CSV。

rs.MoveFirst
Do Until rs.EOF
  For i = 0 To rs.Fields.Count - 1
    'copy/write rs.Fields(i).Value
  Next
  rs.MoveNext
Loop
于 2013-04-27T08:01:15.397 回答