請仔細閱讀下面的模板:
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
但是期望的輸出不會到來,您能否建議這裏?
請參閱我的代碼開發的更新說明。請幫助我,或者讓我知道你是否也有同樣的困惑。 –
子列表在列中,我沒有在描述中顯示它們! –
我無法分辨您的回覆與我發佈的任何內容有何關聯。你讀過我的回答了嗎? –