Я публикую этот вопрос из сообщества Microsoft, потому что я не получил там никакого ответа, и, возможно, кто-то здесь может пролить свет на этот вопрос.
Я заметил проблему, характерную для Word 2013, при использовании VSTO для обработки документа.
Документ содержит изображение в верхнем или нижнем колонтитуле, в параметрах макета которого установлено значение «С обтеканием текстом» с «За текстом» или «Перед текстом»:
Используя VSTO, если я открою документ, а затем попытаюсь обработать фигуры, я получу следующее исключение:
The remote procedure call failed. (Exception from HRESULT: 0x800706BE)
Я загрузил копию здесь: Word2013VstoImageFormattedInHeaderBug.zip
Соответствующий фрагмент кода находится в WordFieldEnumerator.cs
:
private static bool ShapesWithinGroup(Shape shape)
{
var result = false;
try
{
// shape.GroupItems throws the exception
if (shape.GroupItems != null && shape.GroupItems.Count > 0)
{
result = true;
}
}
catch (UnauthorizedAccessException)
{
// This shape is not in a group - ignore
}
catch (Exception exception)
{
var exceptionString = exception.BuildExceptionString();
Console.WriteLine(exceptionString);
Console.WriteLine(exception.StackTrace);
//throw;
}
return result;
}
Вот полное исключение и трассировка стека:
The remote procedure call failed. (Exception from HRESULT: 0x800706BE)
at Microsoft.Office.Interop.Word.Shape.get_GroupItems()
at Word2013VstoImageFormattedInHeaderBug.WordFieldEnumerator.ShapesWithinGroup(Shape shape) in C:\Users\QA\Desktop\Word2013VstoImageFormattedInHeaderBug\Word2013VstoImageFormattedInHeaderBug\WordFieldEnumerator.cs:line 170
The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
at Microsoft.Office.Interop.Word.Shape.get_TextFrame()
at Word2013VstoImageFormattedInHeaderBug.WordFieldEnumerator.ProcessShapes(IEnumerable`1 shapes) in C:\Users\QA\Desktop\Word2013VstoImageFormattedInHeaderBug\Word2013VstoImageFormattedInHeaderBug\WordFieldEnumerator.cs:line 124
The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
at System.Runtime.InteropServices.CustomMarshalers.EnumeratorViewOfEnumVariant.MoveNext()
at System.Linq.Enumerable.<CastIterator>d__aa`1.MoveNext()
at Word2013VstoImageFormattedInHeaderBug.WordFieldEnumerator.ProcessShapes(IEnumerable`1 shapes) in C:\Users\QA\Desktop\Word2013VstoImageFormattedInHeaderBug\Word2013VstoImageFormattedInHeaderBug\WordFieldEnumerator.cs:line 90
at Word2013VstoImageFormattedInHeaderBug.WordFieldEnumerator.GetAllFields() in C:\Users\QA\Desktop\Word2013VstoImageFormattedInHeaderBug\Word2013VstoImageFormattedInHeaderBug\WordFieldEnumerator.cs:line 64
at Word2013VstoImageFormattedInHeaderBug.Program.LockDialogFields(Document document) in C:\Users\QA\Desktop\Word2013VstoImageFormattedInHeaderBug\Word2013VstoImageFormattedInHeaderBug\Program.cs:line 116
at Word2013VstoImageFormattedInHeaderBug.Program.PdfDocument(String documentFilePath) in C:\Users\QA\Desktop\Word2013VstoImageFormattedInHeaderBug\Word2013VstoImageFormattedInHeaderBug\Program.cs:line 60
Исключение выдается независимо от того, пытаюсь ли я его перехватить или нет, и оно приводит к сбою Word 2013:
Эта ошибка не возникает в Word 2016, и я могу успешно обрабатывать фигуры. Однако обновление до Office 2016 не вариант. Я считаю, что для исправления ошибки требуется исправление для Office 2013.
Могу ли я что-нибудь сделать, чтобы это работало в Word 2013? Я пробовал множество предполагаемых исправлений, включая несколько исправлений и переустановок Office 2013, но безрезультатно.
Type
формы вместо того, чтобы ловить исключение, когда это не группа? - person Chris   schedule 05.05.2017