【问题标题】:How to get QTP and Excel to sort correctly?如何让 QTP 和 Excel 正确排序?
【发布时间】:2013-04-21 04:59:04
【问题描述】:

我需要按列 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

【问题讨论】:

    标签: excel vbscript qtp


    【解决方案1】:

    尝试将数据加载到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
    

    【讨论】:

    • 我还没有机会尝试这个。而且很长一段时间都不会。我会让你知道它是否有效。与此同时,我实际上已经发现了排序错误的原因。有人操纵了数据并在“f”列中为“BE OF A”添加了一个额外的“隐藏”字符,我在尝试调试时没有注意到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    相关资源
    最近更新 更多