如何以编程方式重新启用MS Office禁用文件列表中的文档
MS Office程序保留以前打开时导致错误的禁用文件的列表。 用户可以通过程序菜单访问列表并从中select要重新启用的文档来从列表中删除文档。 ( http://support.microsoft.com/kb/286017 )
问题是:如何在不与gui交互的情况下以编程方式实现文档的重新启用?
这是一个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} }
关于MS Office XP(2002)MSWord,禁用文档的列表保存为以下关键字下的随机命名二进制值:[HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 10.0 \ Word \ Resiliency \ DisabledItems]
所以删除每个用户的“DisabledItems”键下的值可能会做的。
还有什么更多的呢? 我还不知道。
有一篇关于Office如何在codeproject中处理COMAddins的好文章。 正常的插件被平等地处理,到目前为止系统保持不变(直到Office 2013)。 据我发现。 随机命名的值包含由空string分隔的Unicode字符的字节数组。 我无法find空值分隔的数组中的所有条目。 但是,索引(3)包含ADDIn的文件名,索引(4)包含ADDIn(如果可用)的描述。
所以应该读取这些值,并要求用户在删除registry项之前重新安装插件,正如Luie在2009年写的。
巩固以前的答案,并在这里阐述他们。
Office产品将禁用的项目存储在名为HKEY_CURRENT_USER\Software\Microsoft\Office\<version>\<product>\Resiliency\DisabledItems
键下的registry中。 例如,Excel 2010的禁用列表位于HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Resiliency\DisabledItems
。
每个禁用的项目都被存储为types为REG_BINARY
的随机名称的密钥。 字节数组的格式是:
- 字节0-3: (也许是一个32位的uinttypes代码,1 = COM Addin)
- 字节4-7:第一个string(path)的32位uint长度(以字节为单位)
- 字节8-11:第二个string的32位uint长度(以字节为单位)(描述)
- 字节12-end:两个Unicodestring,每个字节的长度存储在上面的uints中
BAT脚本重新启用Excel 2016中的所有“禁用项目”。
在Excel->文件 – >选项 – >加载项 – >pipe理 – >禁用项目中find禁用的项目。
:: Deletes all values under the key. REG DELETE HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Resiliency\DisabledItems /va /f
Fyi在params上:
/ va删除此键下的所有值。
/ f强制删除而不提示。
PS。 我有一堆用任务调度器运行macros的工作簿。 Excel会随机添加工作簿,这些工作簿会崩溃到禁用的项目列表中。 所以每天运行这个BAT脚本可以解决这个问题。