如何删除Word文档中的一页(50分)

  • 主题发起人 主题发起人 LuckyJackie
  • 开始时间 开始时间
L

LuckyJackie

Unregistered / Unconfirmed
GUEST, unregistred user!
打开的文档WordDoc中有若干页,如何删除其中的某一页,或连续多页。
WordApp := CreateOleObject('Word.Application');
WordDoc := WordApp.Documents.Open(DocumentName);
 
使用宏录制一段,你就知道了。。。你抄写下来改一下就完了。
 
对, 录制宏是最有效的办法了.
 
我也同意楼上观点,这是学习的最好办法了,偶常这样干:)
 
请教各位,在WORD中如何对页面进行(精确的)删除操作?
 
怎么录制宏?没那么简单!要精确删除页面,首先要查找文档全部分页符,然后再选定某两分页符之间的内容及一分页符再删除,或者将插入点定位到某页再选定本页再删除。这不是什么录制宏能解决的问题。
 
说明一下,关于这个功能,偶很早以前已经实现了,但总觉不是正道,因此拿出来讨论一下,希望能有更好的方案,还请大家不吝赐教。
 
copy from linsb
// 移动光标到指定页首
procedure GotoPageNumber(WrdApp: TWordApplication;PageNumber:OleVariant);
var
what,which,Count:OleVariant;
begin
what:=wdGoToPage;
which:=wdGoToNext;
Count:=WrdApp.Selection.Information[wdNumberOfPagesInDocument];
WrdApp.Selection.GoTo_(what,which,Count,PageNumber);
end;

//删除指定页
procedure DeletePage(WrdApp: TWordApplication;WrdDoc : TWordDocument;PageNumber:OleVariant);
var
n,nn:integer;
ARange:OleVariant;
begin
GotoPageNumber(WrdApp,PageNumber); // 移动光标到指定页首
n:=WrdApp.Selection.Get_Start;
GotoPageNumber(WrdApp,PageNumber+1); // 移动光标到指定页的下一页首
nn:=WrdApp.Selection.Get_Start;
ARange := WrdDoc.Range(EmptyParam, EmptyParam);
ARange.SetRange(n,nn);
ARange.Select;
ARange.Cut;
end;
 
这是偶的代码,请批评指导

procedure WordDocumentDeletePage(var WordApp: Variant; var WordDoc: Variant; PageIndex: Integer);
begin
if VarIsEmpty(WordApp) then
Exit;
if VarIsEmpty(WordDoc) then
Exit;

if PageIndex < 1 then
Exit;

WordDoc.Activate;
WordDocumentSelectPage(WordApp, WordDoc, PageIndex);
WordApp.Selection.Delete;
end;

procedure WordDocumentDeletePages(var WordApp: Variant; var WordDoc: Variant; StartPage, EndPage: Integer);
var
NumberOfPages: Integer;
begin
if VarIsEmpty(WordApp) then
Exit;
if VarIsEmpty(WordDoc) then
Exit;

NumberOfPages := WordDocumentGetNumberOfPages(WordApp, WordDoc);

// if StartPage = -1 then
// StartPage := 1;
// if EndPage = -1 then
// EndPage := NumberOfPages;

if EndPage < 1 then
Exit;
if StartPage > NumberOfPages then
Exit;
if StartPage > EndPage then
Exit;

if StartPage < 1 then
StartPage := 1;
if EndPage > NumberOfPages then
EndPage := NumberOfPages;
if StartPage > EndPage then
StartPage := EndPage;

WordDoc.Activate;
WordDocumentSelectPages(WordApp, WordDoc, StartPage, EndPage);
WordApp.Selection.Delete;
end;

procedure WordDocumentSelectPage(var WordApp: Variant; var WordDoc: Variant;
PageIndex: Integer);
var
Range1, Range2: Variant;
NumberOfPages: Integer;
begin
if VarIsEmpty(WordApp) then
Exit;
if VarIsEmpty(WordDoc) then
Exit;

NumberOfPages := WordDocumentGetNumberOfPages(WordApp, WordDoc);
if NumberOfPages = 0 then
Exit;
if PageIndex < 1 then
Exit;
if PageIndex > NumberOfPages then
Exit;

Range1 := WordDoc.goto(wdGotoPage, wdGoToAbsolute, PageIndex);
Range2 := Range1.GoToNext(wdGotoPage);
if Range2.Start = Range1.Start then
Range2.Start := WordDoc.Range.End;
WordDoc.Range(Range1.Start, Range2.Start).Select;
end;
 
漏了一个子函数

function WordDocumentGetNumberOfPages(WordApp: Variant; WordDoc: Variant): Integer;
begin
if VarIsEmpty(WordApp) then
Exit;
if VarIsEmpty(WordDoc) then
Exit;

Result := 0;

try
WordDoc.Activate;
Result := WordApp.Selection.Information[wdNumberOfPagesInDocument];
// Result := WordDoc.BuiltInDocumentProperties[wdPropertyPages].Value;
except
end;
end;
 
多人接受答案了。
 
后退
顶部