如何能取得ole打开对象的页数,并能跳转。 |
答題得分者是:pceyes
|
thanmail
一般會員 ![]() ![]() 發表:4 回覆:20 積分:14 註冊:2004-12-16 發送簡訊給我 |
我的问题是:
通过Olecontainer或者支持Ole对象的控件,比如RxRichedit等 打开word或者excel文件后,Olecontainer或者RxRichedit只显示文件的第一页, 如何能取得ole打开对象的页数,并能跳转到下一页呢? 我的目的是通过此种方式,能够查看word或excel的内容, 不需要编辑或者选择拷贝,只需要能看即可。 这个问题我已经查了好几天, 就是查不到具体该怎么做, 甚至曾以为是ole的bug, 看来是我自己知识浅薄 ![]() 希望大家能给于指点。 如果有人能提供更好的把word,excel转成位图的方法就太感谢了 ![]() 編輯記錄
thanmail 重新編輯於 2008-12-09 11:19:52, 註解 無‧
|
pceyes
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
找到取得總頁數的方法。
[code delphi] procedure TForm1.Button2Click(Sender: TObject); var WordApp, Doc: OleVariant; i : integer; begin WordApp := Form2.OleContainer1.oleobject.application; Doc := WordApp.ActiveDocument; i := doc.Range.Information[$00000004]; // wdNumberOfPagesInDocument showmessage('總共' inttostr(i) '頁'); end; [/code] 取得目前游標所在頁的頁碼 [code delphi] procedure TForm1.Button1Click(Sender: TObject); var WordApp : OleVariant; i : integer; begin WordApp := OleContainer1.oleobject.application; i := WordApp.Selection.Information[$00000003]; // wdActiveEndPageNumber showmessage('目前在第' inttostr(i) '頁'); end; [/code] 跳轉到下一頁,切頁到指定的頁數 [code delphi] procedure TForm1.Button3Click(Sender: TObject); // Below Copy From C:\Program Files\Borland\Delphi7\Ocx\Servers\WordXp.pas const // What wdGoToBookmark = $FFFFFFFF; wdGoToSection = $00000000; wdGoToPage = $00000001; wdGoToTable = $00000002; wdGoToLine = $00000003; wdGoToFootnote = $00000004; wdGoToEndnote = $00000005; wdGoToComment = $00000006; wdGoToField = $00000007; wdGoToGraphic = $00000008; wdGoToObject = $00000009; wdGoToEquation = $0000000A; wdGoToHeading = $0000000B; wdGoToPercent = $0000000C; wdGoToSpellingError = $0000000D; wdGoToGrammaticalError = $0000000E; wdGoToProofreadingError = $0000000F; // Which wdGoToFirst = $00000001; wdGoToLast = $FFFFFFFF; wdGoToNext = $00000002; wdGoToRelative = $00000002; wdGoToPrevious = $00000003; wdGoToAbsolute = $00000001; var WordApp : OleVariant; begin WordApp := OleContainer1.oleobject.application; WordApp.Selection.GoTo(What:=wdGoToPage, Which:=wdGoToNext, Name:=2); // 第二頁 end; [/code]
------
努力會更接近成功 |
thanmail
一般會員 ![]() ![]() 發表:4 回覆:20 積分:14 註冊:2004-12-16 發送簡訊給我 |
谢谢pceyes的及时帮助。
您提供的方法确实有效,我已经在我的机器上试验成功,可以得到总页数。 我是想通过olecontainer来浏览word,excel文件。 本想通过olecontainer能够抓屏,一页一页的把word,excel文件转成位图。 结果olecontainer 一执行 CreateObjectFromFile,界面就混乱了, olecontainer也和在设计期插入对象的外观也不同了。 看来用olecontainer的方法还不是特别好, 但是毕竟也是一种方法, 我会继续试验下去。 如果有人能提供更好的把word,excel转成位图的方法就好了 ![]() 谢谢pceyes的帮助! |
pceyes
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:70 回覆:657 積分:1140 註冊:2003-03-13 發送簡訊給我 |
補一下Excel取得總頁數的方法有二種,一種用巨集的方式,另一種用HPageBreaks方法。
[code delphi] procedure TForm1.Button1Click(Sender: TObject); var MsExcel,aSheet,MsExcelWorkBook: Variant; begin MsExcel:=CreateOleObject('Excel.Application'); MsExcel.Visible := true; if OpenDialog1.Execute then begin MsExcelWorkBook:=MsExcel.WorkBooks.Open('' OpenDialog1.FileName ''); aSheet:=MsExcel.WorkSheets[1]; // 取得總頁數 1 showmessage(inttostr(MsExcel.ExecuteExcel4Macro('GET.DOCUMENT(50)'))); // 取得總頁數 2 showmessage(inttostr(MsExcel.Sheets.HPageBreaks.Count 1)); end; end; [/code]
------
努力會更接近成功 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |