请仔细阅读下面的模板:
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
101 Closed 66
102 closed 220
现在,当PID = LPID,即PID是!定义为CPID(子进程ID),否则它是一个PPID(父进程ID)
更新可以有一些条目说101和102,它们是孩子,但他们的父母没有他们自己的实际情况,因此66,220不应该输出结果为66 Parent
和220 Parent
没有这样的输出应该在那里。
现在我正在寻找一个代码,它会告诉哪个是父代,哪个是child-means在另一个工作表中标记它们。同时我想列出所有CPID,并在同一行中使用PPID,如果有PPID有自己的子进程。输出将类似于下面
PID Type Of Process? Child1 Child1 Child3 .... ChildN
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个小时。所以我想要一个比我的更快的过程。
我写了下面的代码来满足一些要求:但是得到一个不可理解的错误。
你能帮我吗?我尝试了两种语法Add
或=
- 没有任何帮助。
显式的选项
Class cP
Public m_sRel
Public m_dicC
Private Sub Class_Initialize()
m_sRel = "Child"
Set m_dicC = CreateObject("Scripting.Dictionary")
End Sub
Public Function show()
show = m_sRel & " " & Join(m_dicC.Keys)
End Function
End Class
Dim objSheet1,objSheet2,TotalRows,TotalcolCopy,strPathExcel1
Dim oXls : Set oXls = CreateObject("Excel.Application")
Dim dicP : Set dicP = CreateObject("Scripting.Dictionary")
Dim nRow,nP
strPathExcel1 = "D:\Finalscripts\test.xlsx"
oXls.Workbooks.open strPathExcel1
'oXls.Workbooks.Open(oFs.GetAbsolutePathName("Test.xlsx"))
Set objSheet1 = oXls.ActiveWorkbook.Worksheets("A")
Set objSheet2 = oXls.ActiveWorkbook.Worksheets("B")
TotalRows=oXls.Application.WorksheetFunction.CountA(objSheet1.Columns(1)) - 3
TotalcolCopy=oXls.Application.WorksheetFunction.Match("ABC", objSheet1.Rows(3), 0)
objSheet1.Range(objSheet1.Cells(4,1),objSheet1.Cells(TotalRows,TotalcolCopy)).Copy(objSheet2.Range("A1"))
objSheet2.Range(objSheet2.Cells(1,2),objSheet2.Cells(TotalRows,TotalcolCopy-1)).Delete(-4159)
'Dim aData : aData=objSheet2.Cells.SpecialCells(12)'xlCellTypeVisible
TotalRows = oXls.Application.WorksheetFunction.CountA(objSheet2.Columns(1))
Dim aData : aData = objSheet2.Range("A1:B"&TotalRows)
'MsgBox(LBound(aData, 1)&"And"&UBound(aData, 1))
For nRow = LBound(aData, 1) To UBound(aData, 1)
Set dicP(aData(nRow, 1)) = New cP
Next
For nRow = LBound(aData, 1) To UBound(aData, 1)
If aData(nRow, 1) = aData(nRow, 2) Then
dicP(aData(nRow, 1)).m_sRel = "Parent"
Else
dicP(aData(nRow, 2)).m_dicC.Add aData(nRow, 1), 0 '(aData(nRow, 1)) = 0
End If
Next
objSheet2.Cells.ClearContents'To clear all the previous contenets of the sheet#2
nRow=1
For Each nP In dicP.Keys()
objSheet2.Cells(nRow,1).Value=nP
objSheet2.Cells(nRow,2).Value=dicP(nP).m_sRel
'WScript.Echo nP, dicP(nP).show()
nRow=nRow+1
Next
错误:所需的对象: '[未定义]' 在该行dicP(aData(nRow, 2)).m_dicC.Add aData(nRow, 1), 0 '(aData(nRow, 1)) = 0
编辑:为了让孩子名单,我用写了下面的代码以上:
For Each nP In dicP.Keys()
objSheet2.Cells(nRow,1).Value=nP
objSheet2.Cells(nRow,2).Value=dicP(nP).m_sRel
objSheet2.Range("C"&nRow).Value=dicP(nP).m_dicC.Keys
'WScript.Echo nP, dicP(nP).show()
nRow=nRow+1
Next
但是期望的输出不会到来,您能否建议这里?
请参阅我的代码开发的更新说明。请帮助我,或者让我知道你是否也有同样的困惑。 –
子列表在列中,我没有在描述中显示它们! –
我无法分辨您的回复与我发布的任何内容有何关联。你读过我的回答了吗? –