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

 

最近要做一个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”。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值