Clever-Excel-Forum

Normale Version: ADMX-File auslesen und in Tabelle schreiben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3
(25.06.2017, 20:12)snb schrieb: [ -> ](...) Z.B. steht in der ADML-Datei bei string Id (...)
Was da dazwischen steht ist die Erklärung (PolicyDescription oder Explanation), diese muss den Daten (class, valueName, key) aus der admx-Datei zugeordnet werden, also in die selbe Zeile. Hinzu muss noch die "Kurzbeschreibung" ("PolicyTitle". Oder wie man es sonst eindeutschen soll).

Es soll im Ergebnis so sein wie in der Online-Datenbank (https://gpsearch.azurewebsites.net/#12606), schön Zeilenweise. Was ich aber nicht zwingend brauche sind "Category Path", "Admx", und "Supported On".

Mir erscheint das komplex.
Lade bitte mal eine Datei hoch wie das Ergebnis aussehen sollte.
Beispiel anbei.
Danke.

Ich möchte vorschlagen:


Code:
Sub M_snb()
    Open "G:\OF\__outlk16.admx" For Binary As #1
       sn = Split(Replace(InputB(LOF(1), #1), Chr(34), ""), "</policy>")
    Close #1
    
    Open "G:\OF\__outlk16.adml" For Binary As #1
       sq = Split(InputB(LOF(1), #1), "</string>")
    Close #1
    
    For j = 1 To UBound(sn) - 1
       st = Split(sn(j), vbLf)
       c00 = ""
       sp = Filter(Filter(Split(Replace(Replace(st(1), vbCr, ""), ">", "==="), "="), "<", 0), "$", 0)
       For jj = 0 To 3
         If sp(jj) <> "" Then sp(jj) = Trim(Split(sp(jj))(0))
       Next
       If UBound(Filter(st, "<decimal")) > -1 Then sp(4) = "REG_DWORD"
       If UBound(Filter(st, "<boolean")) > -1 Then sp(4) = "REG_DWORD(1)"
       If UBound(Filter(st, "<text")) > -1 Then sp(4) = "REG_SZ"
       If c01 = "REG_SZ" And UBound(Filter(st, "enum")) > -1 Then sp(4) = "REG_EXPAND_SZ"
       
       sp(5) = Split(Trim(Filter(sq, sp(0), , 1)(0)), ">")(1)
       Cells(j, 1).Resize(, UBound(sp) + 1) = sp
    Next
End Sub
Danke schon mal. Passt jedoch nicht ganz.

1. Einträge wie "L_Permanentlyremovealldeleteditems" (wird in Spalte A geschrieben) benötige ich nicht.
2. Bei manchen Einträgen wird die Beschreibung (Explanation) genommen, bei manchen nur der Richtlinien-Name (Policy). Spalte F.


Klein und fein, Deine Schleifen.  :28:
Ich habe festgestellt das vieles nicht zusammenpasst. Ein Auszug anbei. Was in Spalte E steht passt nicht zu Spalte B. Der Inhalt in Spalte E gehört eigentlich zu "software\policies\microsoft\office\16.0\outlook\addins\lockedformregions".


Arbeitsblatt mit dem Namen 'Tabelle2'
 ABCDE
1Usersoftware\policies\microsoft\office\16.0\outlook\addins REG_DWORDFormularbereichberechtigungen konfigurieren:
Du beschriebst noch immer nicht wie die Daten vom Dateien hergeholt werden müssen.
Du kennst die Inhalt de admx und adml file doch auch ?


Code:
Sub M_snb()
    Open "G:\OF\__outlk16.admx" For Binary As #1
       sn = Split(Replace(InputB(LOF(1), #1), Chr(34), ""), "</policy>")
    Close #1
    
    Open "G:\OF\__outlk16.adml" For Binary As #1
       sq = Split(InputB(LOF(1), #1), "</string>")
    Close #1
    
    For j = 1 To UBound(sn) - 1
       st = Split(Application.Trim(sn(j)), vbCrLf)
       c00 = ""
       sp = Filter(Filter(Split(Replace(Replace(st(1), vbCr, ""), ">", "===="), "="), "<", 0), "$", 0)
       
       For jj = 1 To 3
         If sp(jj) <> "" Then sp(Choose(jj, 6, 5, 4)) = Trim(Split(sp(jj))(0))
       Next
       sv = Filter(sq, Trim(Split(sp(0))(0)), , 1)
       If UBound(Filter(sv, "Explain"">")) > -1 Then sp(0) = Replace(Split(Trim(Filter(sv, "Explain"">")(0)), ">")(1), vbCr, "")
       If UBound(Filter(sv, "Explain"">", 0)) > -1 Then sp(2) = Split(Trim(Filter(sv, "Explain"">", 0)(0)), ">")(1)
       
        If UBound(Filter(st, "<decimal")) > -1 Then
            sp(1) = "REG_DWORD"
            sp(3) = Mid(Trim(Replace(Replace(Replace(Join(Filter(Filter(Filter(st, "value", , 1), "class", 0), "</", 0), ""), "Value> <decimal value", ""), " /> <", "; "), " />", "")), 2)
        ElseIf UBound(Filter(st, "<boolean")) > -1 Then
           sp(1) = "REG_DWORD(1)"
           sf = Filter(st, "</", 0)
        ElseIf UBound(Filter(st, "<text")) > -1 Then
            sp(1) = "REG_SZ"
             If sp(1) = "REG_SZ" And UBound(Filter(st, "enum")) > -1 Then
               sp(1) = "REG_EXPAND_SZ"
            End If
        End If
       
       Cells(j + 1, 1).Resize(, UBound(sp) + 1) = sp
    Next
End Sub
(26.06.2017, 20:44)snb schrieb: [ -> ]Du kennst die Inhalt de admx und adml file doch auch ?
Ja. Aber wie man sie ausliest und in eine Tabelle schreibt so dass sie zusammenpassen weiss ich nicht. Einzelne Keys aus einer XML-Datei auslesen ist nicht das Problem.
Auch der letzte Code arbeitet nicht richtig. Erster Eintrag falsch, der zweite richtig.

Arbeitsblatt mit dem Namen 'Tabelle1'
ABCDEFG
1L_PreferredPSTModeUnicodeANSI classREG_DWORDBevorzugter PST-Modus (Unicode/ANSI)enum id=L_ChooseadefaultformatfornewPSTs valueName=newpstformat>
<value> <decimal value=0; value>
<decimal value=1; value> <decimal value=2; value> <decimal value=3
software\policies\microsoft\office\16.0\outlookUser
2
3Ein kleiner Prozentsatz der
gelöschten Daten wird standardmäßig in PST-
und OST-Dateien von Outlook nicht überschrieben.
Wenn Sie diese Einstellung aktivieren, werden alle gelöschten
Daten in PST- und OST-Dateien überschrieben, wenn Benutzer Outlook beenden.
REG_DWORDGesamten gelöschten Inhalt aus PST-
und OST-Dateien endgültig entfernen
enabled=1; disabled=0pstnullfreeonclosesoftware\policies\microsoft\office\16.0\outlook\pstUser
Das Forum beabsichtet keine Komplettlösungen.
Wir helfen so dass du selbst eine Lösung erstellen kannst.

'arbeitet nicht richtig' ist gar kein nette Feedback.(to put it mildly)
Enthält dein Dictionary das Wort 'Danke ' ???
Ich bin raus.
Seiten: 1 2 3