如何以编程方式重新启用已禁用文件的MS Office列表中的文档

时间:2009-04-15 10:16:46

标签: excel ms-word ms-office powerpoint

MS Office程序会保留一个已禁用的文件列表,这些文件在以前打开时会导致错误。用户可以通过程序菜单访问列表并选择要重新启用的文档来从此列表中删除文档。 (http://support.microsoft.com/kb/286017

问题是:如何在不与gui交互的情况下以编程方式完成文档的重新启用?

5 个答案:

答案 0 :(得分:3)

这是一个Powershell脚本,我把它放在一起以适应我在Win7上使用MS-Access 2013时遇到的类似问题

#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}
}

答案 1 :(得分:2)

巩固之前的答案并在此处阐述。

Office产品在名为HKEY_CURRENT_USER\Software\Microsoft\Office\<version>\<product>\Resiliency\DisabledItems的键下的注册表中存储已禁用的项目。例如,Excel 2010的禁用列表位于HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Resiliency\DisabledItems

每个禁用的项目都存储为REG_BINARY类型的随机命名键。字节数组的格式为:

  • 字节0-3:??? (可能是32位uint类型代码,1 = COM Addin)
  • 字节4-7:第一个字符串(路径)的32位uint长度(以字节为单位)
  • 字节8-11:第二个字符串的32位uint长度(以字节为单位)(描述)
  • bytes 12-end:两个unicode字符串,每个字节长度存储在上面的uint中

答案 2 :(得分:1)

关于MS Office XP(2002)MSWord,禁用文档列表在密钥下保存为随机命名的二进制值: [HKEY_CURRENT_USER \ SOFTWARE \微软\办公室\ 10.0 \字\弹性\ DisabledItems]

因此,为每个用户删除“DisabledItems”键下的值可能会起到作用。

还有什么东西吗?我还不知道 -

答案 3 :(得分:1)

有一篇关于Office如何在codeproject处理COMAddins的好文章。正常的Addins处理相同,系统到目前为止保持不变(直到Office 2013)。 据我所知。随机命名的值包含unicode字符的字节数组,由空字符串分隔。 我无法找到以null分隔的值数组中的所有条目。但是index(3)包含ADDIn的文件名,index(4)包含ADDIn的描述(如果可用)。

所以应该阅读这些值并要求用户在删除注册表项之前重新安装插件,就像Luie在2009年写的那样。

答案 4 :(得分:1)

BAT脚本重新启用所有&#34;禁用的项目&#34;在Excel 2016中。
在Excel-&gt;文件 - &gt;选项 - &gt; Addins-&gt;管理 - >禁用项目中可以找到已禁用的项目。

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

Fyi on params:
/ va删除此键下的所有值 / f在没有提示的情况下强制删除。

PS。我有一堆使用任务调度程序运行宏的工作簿。 Excel会随机添加崩溃到禁用项目列表中的工作簿。因此,每天运行此BAT脚本可以解决问题。