请阅读以下模板:
PID Status LPID
10 Closed 25
11 Open 25
31 Open 31
25 Closed 25
54 Open 31
17 Open 17
20 Closed 31
88 closed 77
77 closed 77
201 open 202
205 open 500
现在当 PID!= LPID 时,该 PID 被定义为 CPID(子进程 ID),否则它是一个 PPID(父进程 ID)
现在我正在寻找一个代码,它将告诉哪个是父级,哪个是子级 - 意味着在另一张表中标记它们。同时我想列出所有 CPID,PPID 在同一行,如果任何 PPID 有子进程他们自己。输出如下所示
PID Type Of Process? Child List
10 Child
11 Child
31 Parent 54 20
25 Parent 10 11
54 Child
17 Parent
20 Child
88 Child
77 Parent 88
我已经使用 VBScript 编写了一个代码,但是使用实际工作表太慢了。对于 2500 个数据,它需要将近 1 小时。所以我想要一个比我的更快的过程。
您能在这里使用 VBscript 帮忙吗?
代码1:
Set objExcel1 = CreateObject("Excel.Application")'Object for W2W Report Dump
strPathExcel1 = "D:\VA\CopyofGEWingtoWing_latest_dump_21112012.xls"
objExcel1.Workbooks.open strPathExcel1
Set objSheet1 = objExcel1.ActiveWorkbook.Worksheets(2)
Set objSheet2 = objExcel1.ActiveWorkbook.Worksheets(1)
IntRow1=1
Do While objSheet1.Cells(IntRow1, 1).Value <> ""
IntRow2=4
IntChildListColumn=3
If objSheet1.Cells(IntRow1,2).Value="Parent" Then
Do While objSheet2.Cells(IntRow2, 1).Value <> ""
If objSheet2.Cells(IntRow2,11).Value=objSheet1.Cells(IntRow1,1).Value And objSheet2.Cells(IntRow2,11).Value <> objSheet2.Cells(IntRow2,1).Value Then
objSheet1.Cells(IntRow1,IntChildListColumn).Value=objSheet2.Cells(IntRow2,1).Value
IntChildListColumn=IntChildListColumn+1
End If
IntRow2=IntRow2+1
Loop
End If
IntRow1=IntRow1+1
Loop
代码2:
Flag=0
IntColTemp=1
IntRowTemp=3
Set objExcel1 = CreateObject("Excel.Application")'Object for Condition Dump
strPathExcel1 = "D:\VA\CopyofGEWingtoWing_latest_dump_21112012.xls"
objExcel1.Workbooks.open strPathExcel1
Set objSheet1 = objExcel1.ActiveWorkbook.Worksheets(1)
Set objSheet2 = objExcel1.ActiveWorkbook.Worksheets(2)
IntRow1=4
IntRow2=1
Do While objSheet1.Cells(IntRow1, 1).Value <> ""
objSheet2.Cells(IntRow2, 1).Value = objSheet1.Cells(IntRow1, 1).Value
IntColTemp=1
Flag=0
'This will travarse to the Parent Business Process ID column horizantally in the excel.
Do While Flag=0
If objSheet1.Cells(IntRowTemp,IntColTemp).Value="Parent Business Process ID" Then
Flag=1
End If
IntColTemp=IntColTemp+1
Loop
IntColTemp=IntColTemp-1
'MsgBox(IntColTemp)
Strcmp1=trim(objSheet1.Cells(IntRow1, 1).Value)
Strcmp2=trim(objSheet1.Cells(IntRow1,IntColTemp).Value)
If Strcmp1=Strcmp2 Then
objSheet2.Cells(IntRow2, 2).Value="Parent"
Else
objSheet2.Cells(IntRow2, 2).Value="child"
End If
IntRow1=IntRow1+1
IntRow2=IntRow2+1
Loop
编辑看到两个 ID 201 和 205 具有子父关系。但是子 id 将需要出现在输出列中,但父 202 和 500 不应该出现在输出列表中,因为主表中没有条目202 close/open 202
和500 open/close 500