全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2811
推到 Plurk!
推到 Facebook!

如何能取得ole打开对象的页数,并能跳转。

答題得分者是:pceyes
thanmail
一般會員


發表:4
回覆:20
積分:14
註冊:2004-12-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-12-08 23:35:52 IP:117.9.xxx.xxx 訂閱
我的问题是:

通过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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-12-09 10:31:45 IP:220.141.xxx.xxx 訂閱
找到取得總頁數的方法。
[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]
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2008-12-09 11:20:21, 註解 無‧
pceyes 重新編輯於 2008-12-09 11:47:16, 註解 無‧
thanmail
一般會員


發表:4
回覆:20
積分:14
註冊:2004-12-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-12-09 11:18:19 IP:218.69.xxx.xxx 訂閱
谢谢pceyes的及时帮助。

您提供的方法确实有效,我已经在我的机器上试验成功,可以得到总页数。


我是想通过olecontainer来浏览word,excel文件。

本想通过olecontainer能够抓屏,一页一页的把word,excel文件转成位图。

结果olecontainer 一执行 CreateObjectFromFile,界面就混乱了,

olecontainer也和在设计期插入对象的外观也不同了。

看来用olecontainer的方法还不是特别好,

但是毕竟也是一种方法,

我会继续试验下去。


如果有人能提供更好的把word,excel转成位图的方法就好了

谢谢pceyes的帮助!


pceyes
尊榮會員


發表:70
回覆:657
積分:1140
註冊:2003-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-12-09 18:07:39 IP:220.141.xxx.xxx 訂閱
補一下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]
------
努力會更接近成功
編輯記錄
pceyes 重新編輯於 2008-12-09 18:57:42, 註解 無‧
pceyes 重新編輯於 2008-12-09 21:53:56, 註解 無‧
系統時間:2024-04-25 15:40:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!