Не удается скопировать определенные страницы документа Word - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь вырезать определенные страницы моего текстового документа (.docx), скажем, 2, 4. Я использую цикл for для перемещения в соответствии с разделением страницы на основе ,. Ниже приведен коддля того же

if (startEnd.Contains(','))
{
    arrSpecificPage = startEnd.Split(',');

    for (int i = 0; i < arrSpecificPage.Length; i++)
    {
        range.Start = doc.GoTo(WdGoToItem.wdGoToPage, WdGoToDirection.wdGoToAbsolute, arrSpecificPage[i]).Start;
        range.End = doc.GoTo(WdGoToItem.wdGoToPage, WdGoToDirection.wdGoToAbsolute, arrSpecificPage[i]).End;
        range.Copy();
        newDocument.Range().Paste();                    
    }
    newDocument.SaveAs(outputSplitDocpath);
}

, но проблема с этим кодом заключается в том, что он просто копирует последнюю страницу только в новый документ, т.е. 4 в этом случае.Как добавить 2?Что не так в коде?

1 Ответ

0 голосов
/ 29 сентября 2018

Поскольку в качестве цели вы всегда указываете весь «диапазон» документа, каждый раз при вставке все содержимое документа заменяется.

Это правильно, что вы работаете с Range объектом, а не с выделением, но это помогает, если вы думаете о диапазоне как выделении.Если вы выделите все (Ctrl + A), то вставьте то, что было выбрано, заменено тем, что вставлено.Все, что назначено для диапазона, заменит содержимое диапазона.

Чтобы решить эту проблему, нужно «свернуть» диапазон - думать об этом, как нажимая клавишу со стрелкой вправо или влево, чтобы «свернуть»."выбор к его начальной или конечной точке.В объектной модели это метод Collapse, который принимает параметр, указывающий, свернуться ли до начальной или конечной точки (см. Код ниже).

Обратите внимание, что я также изменил используемый кодdocument.Content вместо Document.Range.Content - это свойство, которое возвращает весь текст документа;Range - это метод, который ожидает начальную и конечную точку, определяющую Range.Использование свойства является предпочтительным методом для всего документа.

if (startEnd.Contains(','))
{
    arrSpecificPage = startEnd.Split(',');

    for (int i = 0; i < arrSpecificPage.Length; i++)
    {
        range.Start = doc.GoTo(WdGoToItem.wdGoToPage, WdGoToDirection.wdGoToAbsolute, arrSpecificPage[i]).Start;
        range.End = doc.GoTo(WdGoToItem.wdGoToPage, WdGoToDirection.wdGoToAbsolute, arrSpecificPage[i]).End;
        range.Copy();
        Word.Range targetRange = newDocument.Content
        targetRange.Collapse(Word.WdCollapseDirection.wdCollapseEnd);
        targetRange.Paste();                    
    }
    newDocument.SaveAs(outputSplitDocpath);
}
...