2009-04-15 9 views
1

MS Office-Programme behalten eine Liste der deaktivierten Dateien bei, die beim vorherigen Öffnen Fehler verursacht haben. Ein Benutzer kann Dokumente aus dieser Liste entfernen, indem er über das Programmmenü auf die Liste zugreift und ein Dokument auswählt, das wieder aktiviert werden soll. (http://support.microsoft.com/kb/286017)Wie Sie Dokumente in der MS Office-Liste der deaktivierten Dateien programmatisch wieder aktivieren

Die Frage ist: Wie kann diese Reaktivierung von Dokumenten programmgesteuert durchgeführt werden, ohne Interaktion mit der GUI?

Antwort

1

In Bezug auf MS Office XP (2002) MSWord die Liste der deaktivierten Dokumente als zufällig binäre Werte unter dem Schlüssel mit dem Namen gehalten wird: [HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 10.0 \ Word \ Resiliency \ DisabledItems]

Das Löschen der Werte unter dem "DisabledItems" Schlüssel für jeden Benutzer wird wahrscheinlich den Trick durchführen.

Gibt es noch etwas mehr? Ich weiß es noch nicht.

+1

Das ist es - beachten Sie jedoch, dass Microsoft dieses Feature aus einem bestimmten Grund implementiert hat ... Wenn die Dokumente/Addins instabil sind, wird der Benutzer Ihnen nicht dafür danken, dass Sie die ganze Zeit wieder aktiviert haben. – Ant

+0

Ja - es gibt normalerweise einen guten Grund für Dokumente, die auf dieser Liste landen. Mein Bedarf ist eine hochspezialisierte Anwendung, die serverbasiert ausgeführt wird, und es gibt keinen echten Benutzer, der aufräumt, wenn etwas schief geht. –

1

Es gibt einen guten Artikel darüber, wie Office COMAddins bei codeproject handhabt. Normale Addins werden gleich behandelt und das System wurde bisher unverändert gehalten (bis Office 2013). Soweit ich herausgefunden habe. Der zufällig benannte Wert enthält ein Byte-Array von Unicode-Zeichen, die durch Null-Strings getrennt sind. Ich konnte nicht alle Einträge in dem Null-getrennten Wertebereich herausfinden. Index (3) enthält jedoch den Dateinamen des ADDIn und Index (4) enthält eine Beschreibung des ADDIn, falls verfügbar.

Also sollte man die Werte lesen und den Benutzer auffordern, die Add-Ins zu installieren, bevor die Registrierungsschlüssel zu löschen, wie Luie 2009 zurück schrieb

1

früheren Antworten Konsolidieren und auf sie hier darzulegen.

Office-Produkte speichern deaktivierte Elemente in der Registrierung unter Schlüssel mit dem Namen HKEY_CURRENT_USER\Software\Microsoft\Office\<version>\<product>\Resiliency\DisabledItems. Die deaktivierte Liste von Excel 2010 befindet sich beispielsweise unter HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Resiliency\DisabledItems.

Jedes deaktivierte Element wird als zufällig benannter Schlüssel des Typs REG_BINARY gespeichert. Das Format des Byte-Arrays lautet:

  • Bytes 0-3: ??? (vielleicht ein 32-Bit-Uintyp-Code, 1 = COM-Add-In)
  • Bytes 4-7: 32-Bit-Uint Länge (in Bytes) für die erste Zeichenfolge (Pfad)
  • Bytes 8-11: 32-Bit uint Länge (in Bytes) für die zweite Saite (Beschreibung)
  • Bytes 12-end: zwei Strings von Unicode-Zeichen, die Bytelänge für die jeweils in den uints oben
2

hier abgelegt wird, ist ein Powershell Skript, das ich zusammengeworfen habe, um ein ähnliches Problem zu lösen, das ich mit MS-Access 2013 unter Win7

#RemoveOfficeDisabledItem.ps1 
#command line: 
# powershell -executionpolicy unrestricted -file ".\RemoveOfficeDisabledItem.ps1" 

#Update these variables to suit your situation 
$OfficeVersion="15.0" 
$OfficeApp="Access" 
$FileName="My Blocked File.mdb" 

#Converts the File Name string to UTF16 Hex 
$FileName_UniHex="" 
[System.Text.Encoding]::ASCII.GetBytes($FileName.ToLower()) | %{$FileName_UniHex+="{0:X2}00" -f $_} 

#Tests to see if the Disabled items registry key exists 
$RegKey=(gi "HKCU:\Software\Microsoft\Office\${OfficeVersion}\${OfficeApp}\Resiliency\DisabledItems\") 
if($RegKey -eq $NULL){exit} 

#Cycles through all the properties and deletes it if it contains the file name. 
foreach ($prop in $RegKey.Property) { 
    $Val="" 
    ($RegKey|gp).$prop | %{$Val+="{0:X2}" -f $_} 
    if($Val.Contains($FileName_UniHex)){$RegKey|Remove-ItemProperty -name $prop} 
} 
hatte
0

BAT-Skript, um alle "deaktivierten Elemente" in Excel 2016 wieder zu aktivieren.
Deaktivierte Elemente finden Sie in Excel-> Datei-> Optionen-> Addins-> Verwalten-> Deaktivierte Elemente.

:: Deletes all values under the key. 
REG DELETE HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Resiliency\DisabledItems /va /f 

Fyi auf params:
/va alle Werte unter diesem Schlüssel löschen.
/f Erzwingt das Löschen ohne Aufforderung.

PS. Ich habe eine Reihe von Arbeitsmappen, die Makros mit einem Taskplaner ausführen. Excel würde zufällig Arbeitsmappen hinzufügen, die auf der Liste der deaktivierten Elemente abgestürzt sind. Wenn Sie dieses BAT-Skript also täglich ausführen, wird es OK.