Как программно повторно включить документы в списке отключенных файлов MS Office - PullRequest
3 голосов
/ 15 апреля 2009

Программы MS Office хранят список отключенных файлов, которые вызвали ошибки при открытии ранее. Пользователь может удалить документы из этого списка, получив доступ к списку через меню программы и выбрав документ для повторного включения. (http://support.microsoft.com/kb/286017)

Вопрос заключается в следующем: Как можно выполнить это повторное включение документов программным путем, без взаимодействия с графическим интерфейсом?

Ответы [ 5 ]

3 голосов
/ 27 января 2015

Вот сценарий Powershell, который я создал вместе для решения аналогичной проблемы, с которой я столкнулся в MS-Access 2013 на 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}
}
3 голосов
/ 02 октября 2014

Консолидация предыдущих ответов и разъяснение их здесь.

Продукты 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 (в байтах) для второй строки (описание)
  • байты 12-конец: две строки символов Юникода, длина байта для каждой из которых хранится в приведенных выше uints
1 голос
/ 11 февраля 2017

BAT-скрипт для повторного включения всех «отключенных элементов» в Excel 2016.
Отключенные элементы находятся в Excel-> Файл-> Параметры-> Надстройки-> Управление-> Отключенные элементы.

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

Fyi по параметрам:
/ va Удалить все значения под этим ключом.
/ f Принудительно удаляет без запроса.

PS. У меня есть куча книг, которые запускают макросы с помощью планировщика задач. Excel будет случайным образом добавлять книги, которые упали на список отключенных элементов. Таким образом, выполнение этого сценария BAT ежедневно разрешает проблему.

1 голос
/ 26 августа 2014

Хорошая статья о том, как Office обрабатывает COMAddins в codeproject . Обычные надстройки обрабатываются одинаково, и система до сих пор оставалась неизменной (до Office 2013). Насколько я узнал. Случайно названное значение содержит байтовый массив символов Unicode, разделенных нулевыми строками. Я не мог узнать обо всех записях в массиве значений, разделенных нулями. Однако указатель (3) содержит имя файла ADDIn, а указатель (4) содержит описание ADDIn, если доступно.

Таким образом, следует прочитать значения и попросить пользователя переустановить надстройки перед удалением ключей реестра, как Луи написал в 2009 году.

1 голос
/ 27 апреля 2009

Относительно MS Office XP (2002) MSWord список отключенных документов хранится в виде случайных имен двоичных значений под ключом: [HKEY_CURRENT_USER \ Software \ Microsoft \ Office \ 10.0 \ Word \ Упругость \ DisabledItems]

Таким образом, удаление значений под ключом «DisabledItems» для каждого пользователя, вероятно, поможет.

Есть что-то еще? Я не знаю - пока.

...