2013-04-26 40 views
0

我需要按列升序排列,然后升序升序,然后升序升序,列升序升序,然后升序升序,然后升序升序。仅仅使用QTP,我似乎无法使Excel正确排序数据。如何让QTP和Excel正确排序?

我想要什么:

 
Table 1: 
| a | b  | c |  d  | e | f  | g |  h  | 
--------------------------------------------------------------------- 
| 1 | BE  | blank | 51 stuff | 1 | BE  | blank | 51 stuff | 
| 1 | BE  | blank | 100 stuff | 1 | BE  | blank | 100 stuff | 
| 1 | BE OF A | blank | 121 stuff | 1 | BE OF A | blank | 121 stuff | 
| 1 | BE OF A | blank | 200 stuff | 1 | BE OF A | blank | 200 stuff | 
| 2 | SEA  | blank | 5 stuff | 1 | SEA  | blank | 5 stuff | 

我该怎么来代替:

 
Table 2: 
| a | b  | c |  d  | e | f  | g |  h  | 
--------------------------------------------------------------------- 
| 1 | BE  | blank | 100 stuff | 1 | BE OF A | blank | 121 stuff | 
| 1 | BE  | blank | 51 stuff | 1 | BE OF A | blank | 200 stuff | 
| 1 | BE OF A | blank | 121 stuff | 1 | BE  | blank | 100 stuff | 
| 1 | BE OF A | blank | 200 stuff | 1 | BE  | blank | 51 stuff | 
| 2 | SEA  | blank | 5 stuff | 1 | SEA  | blank | 5 stuff | 

E栏到h被填充和排序第一。通常,这些列的单元格按表1中列出的正确排序顺序进行填充。但是,有些情况下排序顺序不正确,但很少见。可能100,000次尝试中有1次会使用未排序的数据填充。

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

 
Table 3: 
| a | b  | c |  d  | e | f  | g |  h  | 
--------------------------------------------------------------------- 
| 1 | BE  | blank | 100 stuff | 1 | BE  | blank | 51 stuff | 
| 1 | BE  | blank | 51 stuff | 1 | BE  | blank | 100 stuff | 
| 1 | BE OF A | blank | 121 stuff | 1 | BE OF A | blank | 121 stuff | 
| 1 | BE OF A | blank | 200 stuff | 1 | BE OF A | blank | 200 stuff | 
| 2 | SEA  | blank | 5 stuff | 1 | SEA  | blank | 5 stuff | 

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 

回答

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 
+0

我还没有机会尝试这个。而且不会很久。我会让你知道它是否有效。同时我已经发现了排序不好的原因。有人操纵数据,并在列“f”中为“BE OF A”添加了一个额外的“隐藏”字符,我在尝试调试时没有注意到这一点。 – 2013-05-18 18:31:45