線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3060
推到 Plurk!
推到 Facebook!

取Excel的紙張大小

缺席
hung17
一般會員


發表:1
回覆:2
積分:0
註冊:2009-05-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-05-21 16:20:17 IP:203.74.xxx.xxx 訂閱
我想取得Excel->版面設定->紙張大小
所有紙張大小的名稱跟代號
像A4代號是9

因為我想抓取自設的紙張大小
hung17
一般會員


發表:1
回覆:2
積分:0
註冊:2009-05-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-25 16:48:43 IP:203.74.xxx.xxx 訂閱
sryang
尊榮會員


發表:38
回覆:741
積分:875
註冊:2002-06-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-30 10:04:15 IP:124.10.xxx.xxx 訂閱
Excel 的紙張編號在 Excel2000.pas 或是 ExcelXp.pas 裡面 
Library path 要加上 $(DELPHI)\Ocx\Servers
檔案內搜尋 XlPaperSize 就有了

如果紙張編號大於或等於 xlPaperUser ($00000100) 者就是自訂紙張
由自訂紙張名稱取得自訂紙張大小可以使用以下程式
需 uses Printers, WinSpool

[code delphi]
function GetPaperSize(PaperName: String; out PaperSize: TSize): Boolean;
var
PrintDevice, PrintDriver, PrintPort: array[0..255] of Char;
hDMode: THandle;
hPrinter: THandle;
FormInfoArr: array[0..15] of TFormInfo1;
byteNeeded: Cardinal;
begin
Result := False;
Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);
if hPrinter = 0 then
Exit;

if GetForm(hPrinter, PChar(PaperName), 1, @FormInfoArr, Sizeof(FormInfoArr), byteNeeded) then
begin
PaperSize.cx := FormInfoArr[0].Size.cx;
PaperSize.cy := FormInfoArr[0].Size.cy;
Result := True;
end;

ClosePrinter(hPrinter);
end;
[/code]
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
編輯記錄
sryang 重新編輯於 2009-05-30 10:11:53, 註解 無‧
sryang 重新編輯於 2009-05-30 10:13:07, 註解 無‧
hung17
一般會員


發表:1
回覆:2
積分:0
註冊:2009-05-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-06-01 11:55:00 IP:203.74.xxx.xxx 訂閱
先感謝 sryang 回答我的問題

sryang 應該誤會我的意思,我想抓取的紙張編號剛好就是自定紙張
所以無法在 Excel2000.pas 這裡得到
sryang 提供的程式碼是抓取紙張的長跟寬,並不是我想要的紙張編號
不過也學到怎樣抓取紙張的長跟寬

以下是我在其他網站找到的程式碼
已可以抓到我想到的自訂紙張編號
但,不知會什會多出最後一組編號

[code delphi]
var
I, nRet: Integer;
nMode: THandle;
aName, aPort, aDriver: array [0..79] of Char;
aPaperNames: array of array[0..63] of Char;
aPapers: array of Word;
AList: TStrings ;
begin
Assert(AList <> nil);

Printer.GetPrinter(aName, aDriver, aPort, nMode);
nRet := WinSpool.DeviceCapabilitiesA(aName, aPort, DC_PAPERS, nil, nil);
Edit5.Text := IntToStr(nRet) ;
if nRet < 0 then Exit;
SetLength(aPaperNames, nRet);
SetLength(aPapers, nRet);

WinSpool.DeviceCapabilities(aName, aPort, DC_PAPERNAMES, @aPaperNames[0], nil);
WinSpool.DeviceCapabilities(aName, aPort, DC_PAPERS, @aPapers[0], nil);

ListBox2.Items.Clear ;
for i := 1 to nRet do
begin
ListBox2.Items.Add(IntToStr(i) '. ' aPaperNames[i] '-' IntToStr(aPapers[I]));
end ;

[/code]
Delhpi
一般會員


發表:9
回覆:14
積分:4
註冊:2008-07-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-08-16 20:20:45 IP:221.130.xxx.xxx 訂閱

  1. [code delphi]
    for i := 1 to nRet do
    [/code]
  2. begin
  3. ListBox2.Items.Add(IntToStr(i) '. ' aPaperNames[i-1] '-' IntToStr(aPapers[I-1]));
  4. end ;
系統時間:2017-10-24 15:54:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!