2009-04-15 9 views
1

Les programmes MS Office conservent une liste de fichiers désactivés qui ont causé des erreurs lors de l'ouverture précédente. Un utilisateur peut supprimer des documents de cette liste en accédant à la liste via le menu du programme et en sélectionnant un document à réactiver. (http://support.microsoft.com/kb/286017)Comment faire pour réactiver par programme les documents dans la liste des fichiers désactivés de MS Office

La question est: Comment cette réactivation de documents peut-elle être accomplie par programmation, sans interaction avec le GUI?

Répondre

1

En ce qui concerne MS Office XP (2002) MSWord la liste des documents handicapés est maintenue sous forme de valeurs binaires nommé au hasard sous la clé: [HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 10.0 \ Word \ Resiliency \ DisabledItems]

Donc supprimer les valeurs sous la clé "DisabledItems" pour chaque utilisateur fera probablement l'affaire.

Y at-il quelque chose de plus? Je ne sais pas - encore.

+1

C'est tout - sachez que Microsoft a implémenté cette fonctionnalité pour une raison ... si les documents/addins sont instables, l'utilisateur ne vous remerciera pas de tout réactiver tout le temps. – Ant

+0

Oui, il y a généralement une bonne raison pour que les documents se retrouvent sur cette liste. Mon besoin est une application hautement spécialisée qui fonctionne sur serveur et il n'y a pas de véritable utilisateur à nettoyer quand quelque chose ne va pas. –

1

Il existe un bon article sur la façon dont Office traite les adresses COMAddins au codeproject. Les Addins normaux sont traités de manière égale et le système a été conservé tel quel jusqu'à présent (jusqu'à Office 2013). Pour autant que j'ai découvert. La valeur nommée aléatoirement contient un tableau d'octets de caractères Unicode, séparés par des chaînes NULL. Je n'ai pas pu me renseigner sur toutes les entrées du tableau de valeurs nulles. Cependant index (3) contient le nom de fichier de l'ADDIn et index (4) contient une description de l'ADDIn si disponible.

Donc, il faut lire les valeurs et demander à l'utilisateur de réinstaller les addins avant de supprimer les clés de Registre comme Luie écrit en 2009.

1

les réponses précédentes et la consolidation évoquerons ici.

Les produits Office stockent les éléments désactivés dans le registre sous les clés HKEY_CURRENT_USER\Software\Microsoft\Office\<version>\<product>\Resiliency\DisabledItems. Par exemple, la liste des personnes handicapées d'Excel 2010 est sous HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Resiliency\DisabledItems.

Chaque élément désactivé est stocké sous la forme d'une clé nommée au hasard de type REG_BINARY. Le format du tableau d'octets est:

  • octets 0-3: ??? (peut-être un code de type uint 32 bits, 1 = COM Addin)
  • octets 4-7: longueur de uint de 32 bits (en octets) pour la première chaîne (chemin)
  • octets 8-11: 32 bits longueur uint (en octets) de la seconde chaîne (la description)
  • octets 12-end: deux chaînes de caractères unicode, la longueur d'octet pour chacun desquels est stocké dans le uints ci-dessus
2

Voici une Powershell Script que j'ai jeté ensemble pour correspondre à un problème similaire que j'avais avec MS-Access 2013 sur 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} 
} 
0

Le script BAT permet de réactiver tous les "éléments désactivés" dans Excel 2016.
Les éléments désactivés se trouvent dans Excel-> Fichier-> Options-> Addins-> Gérer-> Éléments désactivés.

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

Fyi sur params:
/va Supprimer toutes les valeurs sous cette clé.
/f Force la suppression sans invite.

PS. J'ai un tas de classeurs qui exécutent des macros avec un planificateur de tâches. Excel ajouterait aléatoirement des classeurs qui se sont écrasés sur la liste des éléments désactivés. Donc, exécuter ce script BAT quotidiennement le résout OK.

Questions connexes