Элемент списка
Я реализую шаблон Word для приложения для заполнения форм с использованием VSTO и c # в Visual Studio 2017 и хочу воспользоваться преимуществами управления содержимым повторяющегося раздела Word.Тем не менее, я не могу программно применить этот тип контроля после того, как я ранее защитил документ для заполнения формы.Похоже, что незащищенный документ не возвращает документ в то же незащищенное состояние в этом контексте, что и до его защиты.Вот урезанная демонстрационная программа для выделения проблемы:
В Visual Studio создайте новый проект шаблона VSTO для Word 2013 и 2016, оставив в проекте неизменный пустой шаблон документа по умолчанию, добавьте следующий код вЧастичный класс ThisDocument
private void ThisDocument_Startup(object sender, System.EventArgs e)
{
//Demonstrates an unexpected impact of protecting then subsequently unprotecting a document
AddTableDirect();
DocProtect();
DocUnprotect();
AddTableRepeatingSection();
}
private void ThisDocument_Shutdown(object sender, System.EventArgs e)
{
}
private void DocProtect()
{
//Protects the active document restricting the operator to form filling
object noReset = true;
object password = System.String.Empty;
object useIRM = false;
object enforceStyleLock = false;
this.Protect(Word.WdProtectionType.wdAllowOnlyFormFields,
ref noReset, ref password, ref useIRM, ref enforceStyleLock);
}
private void DocUnprotect()
{
// Unprotects the active document allowing programmatic manipulation
object password = System.String.Empty;
this.Unprotect(ref password);
}
private void AddTableDirect()
{
//Creates a one row table directly adding a single plain text content control
Word.Range range = this.Sections[1].Range.Paragraphs[1].Range;
Word.Table table = this.Tables.Add
(range, 1, 1, Word.WdDefaultTableBehavior.wdWord9TableBehavior, Word.WdAutoFitBehavior.wdAutoFitWindow);
Word.ContentControl cc = this.ContentControls.Add
(Word.WdContentControlType.wdContentControlText, table.Cell(1, 1).Range);
}
private void AddTableRepeatingSection()
{
//Programatically duplicates the table as a repeating section
Word.Table table = this.Sections[1].Range.Tables[1];
Word.Range rSRange = table.Range;
Word.ContentControl rSCC = this.ContentControls.Add
(Word.WdContentControlType.wdContentControlRepeatingSection, rSRange);
rSCC.RepeatingSectionItems[1].InsertItemAfter();
}
Если вы создаете и запускаете этот код как есть, то System.Runtime.InteropServices.COMException
генерируется с текстом: «Этот метод или свойство недоступно, поскольку текущий выбор частично покрывает элемент управления содержимым простого текста«на оператор, который добавляет элемент управления« Повторяющаяся секция »в методе AddTableRepeatingSection()
(строка перед InsertItemAfter
).
Однако, если вы закомментируете операторы DocProtect()
и DocUnprotect()
в ThisDocument_StartUp
, тогдаэтот код выполняется успешно.
Что мне нужно изменить, чтобы позволить мне защищать и снимать защиту с документа без создания этого исключения при программном применении повторяющегося элемента управления содержимым раздела?