我试图剪切我的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
?代码有什么问题?
答案 0 :(得分:2)
由于您始终将整个文档“范围”指定为目标,因此每次粘贴文档的全部内容都会被替换。
使用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);
}