delphi 循环读取word每页的内容显示在OleContainer1内

来源:互联网 发布:linux 修改时间实例 编辑:程序博客网 时间:2024/05/07 23:22
 

最近要做一个word浏览内容的工具,网上找了找例子基本都差不都,下回来试了试有点问题。

OleContainer1载入word后默认都是显示第一页的,在csdn上发帖求助,终于解决了显示问题。

感谢csdn的“erhan”帮助我完成了这个工具。

 

 我贴出来的这段代码,也是在网上找到的,网上的代码测试会发现有点问题,只有第一页和最后一页可以显示,其他页都和第一页一样的,跟踪之后发现除最后一页之外,其他页都是一样的(word全部文字信息),这里是改过后的代码:

procedure TForm1.Button7Click(Sender: TObject);var  wordapp, WordDoc, PageRange: Variant;  i, nPageCounts, nStart, nEnd : Integer;  sContext: string;begin  //禁止双击打开word编辑  olecontainer1.AutoActivate := aaManual;  //禁止右键菜单  olecontainer1.AutoVerbMenu := False;  wordapp := CreateOleObject('Word.Application');  try  wordapp.Visible := False;  WordDoc := wordapp.Documents.Open(AppPath+'7S.doc');  //文档总页数  nPageCounts := wordapp.Selection.Information[wdNumberOfPagesInDocument];  //如果只有一页 那么全选就OK了  if nPageCounts = 1 then  begin  wordapp.Selection.WholeStory;  wordapp.selection.copy;  if olecontainer1.canpaste then  olecontainer1.paste;  OleContainer1.Update;  Exit;  end;  nStart := 0;  nEnd := 0;  //循环获取文档页中的内容  for i := 1 to nPageCounts do  begin  //定位到第i页  PageRange := wordapp.Selection.GoTo(wdGoToPage, wdGoToAbsolute, IntToStr(i));  //如果第i页是最后一页 那么直接将光标移动到最后 并输出内容  if i = nPageCounts then  begin  wordapp.Selection.EndKey(wdStory,wdExtend);  wordapp.selection.copy;  if OleContainer1.canpaste then  OleContainer1.paste;  OleContainer1.Update;  Exit;  end;  //取第i页的页首位置作为开始位置  //nStart := wordapp.Selection.Start;  nStart := nEnd;  //定位到i+1页  PageRange := wordapp.Selection.GoTo(wdGoToPage, wdGoToAbsolute, IntToStr(i+1));  //取第i+1页的页首位置作为结束位置  nEnd := wordapp.Selection.Start;  //showmessage(IntToStr(nStart)+';'+IntToStr(nEnd));  //根据开始位置和结束位置确定文档选中的内容(第i页的内容)  WordDoc.Range(nStart,nEnd).Select;  sContext := WordDoc.Range.Text;  //ShowMessage(sContext);  //wordapp.Selection.WholeStory;  wordapp.selection.copy;  if olecontainer1.canpaste then  olecontainer1.paste;  OleContainer1.Update;  Sleep(3000);  end;  finally  wordapp.Quit;  end;end;

再次感谢csdn的“erhan”。