У меня есть индекс символа и вы хотите получить Range
страницы, содержащей этот индекс. Чтобы проиллюстрировать этот конкретный случай использования, я выполняю правила проверки предложения (используйте обработку естественного языка), и я хочу запустить их на всей странице, над которой работает пользователь. Итак:VSTO Word: Retrieve range страницы
public static class ExtensionForDocument
{
public static Range GetPage(this Document document, int characterIndex)
{
throw new NotImplementedException();
}
}
Пример вызова:
public void OnInspect(IRibbonControl control)
{
var selection = Application.Selection;
var selectionRange = Application.ActiveDocument.GetPage(selection.Range.Start);
// Process range here.
}
Я пробовал:
public static Range GetPage(this Document document, int characterIndex)
{
var sectionCount = document.Sections.Count;
for (var sectionIndex = 1; sectionIndex <= sectionCount; sectionIndex++)
{
var section = document.Sections[sectionIndex];
var sectionRange = section.Range;
if (characterIndex >= sectionRange.Start && characterIndex <= sectionRange.End)
{
return sectionRange;
}
}
return null;
}
Разделы не работают. Таким образом, получение диапазонов фактических страниц:
public static Range GetPage(this Document document, int characterIndex)
{
var numberOfPages = (int)document.Content.Information[WdInformation.wdNumberOfPagesInDocument];
for (var p = 1; p <= numberOfPages; p++)
{
object what = WdGoToItem.wdGoToPage;
object which = WdGoToDirection.wdGoToAbsolute;
object count = p;
var range = document.GoTo(ref what, ref which, ref count);
if (characterIndex >= range.Start && characterIndex <= range.End) return range;
}
return document.Range();
}
Но на этих диапазонах в начале и в конце указывается номер страницы, а не индекс символа. Я также пробовал то же самое с закладками, видя, что я читал, что должны быть закладки «\ page», но нет никаких закладок. Каков правильный подход?
Примечание: Word 2016, Office Tools в VS2015 под .NET4.6.1
Прежде всего: должен ли анализ быть основан на странице? Это не просто для диапазона текущей страницы, Word работает намного лучше на параграфах и разделах. Поэтому, если работа над секцией или рядом абзацев работает тоже, чем вы могли бы предпочесть такой подход. Только получение диапазона текущей страницы довольно просто, используя закладку «\ page». У вас, похоже, проблемы с этой закладкой, но вы не указали соответствующий исходный код, поэтому мы не можем знать, в чем была проблема. Обратите внимание, что встроенная закладка «\ page» скрыта, но тем не менее существует. –