无法复制Word文档的特定页面

时间:2018-09-28 11:22:13

标签: c# .net ms-word com document

我试图剪切我的word文档(.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 :(得分:2)

由于您始终将整个文档“范围”指定为目标,因此每次粘贴文档的全部内容都会被替换。

使用Range对象而不是选择对象是正确的,但是如果您思考类似选择内容的范围,这将有所帮助。如果选择所有内容(Ctrl + A)然后粘贴,则所选内容将替换为粘贴的内容。分配给范围的任何内容都将替换范围的内容。

解决此问题的方法是“折叠”范围-就像按右箭头或左箭头键将选择“折叠”到其起点或终点一样。在对象模型中,这是Collapse方法,该方法带有一个参数,该参数指示是否折叠到起点或终点(请参见下面的代码)。

请注意,我还更改了代码,以使用document.Content代替Document.RangeContent是一个属性,它返回文档的整个主体; 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);
}