다음 소스를 보시고 del 대가님들의 분석 부탁드립니다. 무엇이 잘못되엇는지..
대강 말씀드리면.. 버튼1을 클릭하면 첫번째 word 문서를 open하여 print 하고 close합니다. 그리고 두번째 word 문서를 open하여 print하고 close 합니다.
여기까지는 문제없이 되는데..
Excel과 ppt를 이런 방법으로 하려고 하니 문제가 발생하더군요.. '대가'님들의 협조 부탁드립니다. .. 문제는 ..
1) word를 사용할 때 쓰던 메스도를 그대로 사용할 수 없다.. .
2) early binding을 사용하므로.. 디자인타임시에는 에러를 체크할 수 없고 코드인사이트 기능도 사용할 수 없다..
그래서.. 제가 가장 알고 싶은 것은
1) Excel Ole 객체를 사용할 때 파일 오픈, 프린팅, 닫기..
2) Powerpoint Ole 객체를 사용할 때 파일 오픈, 프린팅, 닫기..
입니다.
아래 코드 상에 에러가 나는 부분들 체크해 드릴 테는 "대가"님들의 조언 부탁드립니다. Please...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Comobj,Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
var
MsWord : OleVariant;
Sheet : OleVariant;
ppt : OleVariant;
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
//var
// MsWord : OleVariant;
begin
MsWord := CreateOleObject('Word.Basic');
MsWord.FileOpen('c:test1.doc');
MsWord.FilePrint(1);
MsWord.FileClose(2);
showMessage('파일 프린트되었음. 파일 닫았음');
MsWord.FileOpen('c:test2.doc');
MsWord.FilePrint(1);
MsWord.FileClose(2);
showMessage('파일 프린트되었음. 파일 닫았음');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
MsWord.AppClose;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Sheet := CreateOleObject('Excel.Application'); //<-- word와 같이
// Excel.basic으로 하면 에러
// 발생
Sheet.FileOpen('c:test1.xls'); // <---- 에러 발생.. fileopen 메소드지원안함
Sheet.FilePrint(1); // <-- 아래의 코드부터는 위의 에러때문에 진행되지 않음
Sheet.FileClose(2); // 아마도 이 메소드도 지원하지 않을 듯함
showMessage('파일 프린트되었음. 파일 닫았음');
Sheet.FileOpen('c:test2.xls'); // 위와 마찬가지 일듯..
Sheet.FilePrint(1);
Sheet.FileClose(2);
showMessage('파일 프린트되었음. 파일 닫았음');
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Sheet.AppClose;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
ppt := CreateOleObject('PowerPoint.Basic');
ppt.FileOpen('c:test1.ppt'); //<-- 에러 발생.. fileopen 메소드 지원 안함..
ppt.FilePrint(1); // 아래는 엑셀에서 안되었듯이 안될 듯함..
ppt.FileClose(2);
showMessage('파일 프린트되었음. 파일 닫았음');
ppt.FileOpen('c:test2.ppt');
ppt.FilePrint(1);
ppt.FileClose(2);
showMessage('파일 프린트되었음. 파일 닫았음');
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
ppt.AppClose;
end;
end.
> 다음 소스를 보시고 del 대가님들의 분석 부탁드립니다. 무엇이 잘못되엇는지..
> 대강 말씀드리면.. 버튼1을 클릭하면 첫번째 word 문서를 open하여 print 하고 close합니다. 그리고 두번째 word 문서를 open하여 print하고 close 합니다.
> 여기까지는 문제없이 되는데..
>
> Excel과 ppt를 이런 방법으로 하려고 하니 문제가 발생하더군요.. '대가'님들의 협조 부탁드립니다. .. 문제는 ..
> 1) word를 사용할 때 쓰던 메스도를 그대로 사용할 수 없다.. .
> 2) early binding을 사용하므로.. 디자인타임시에는 에러를 체크할 수 없고 코드인사이트 기능도 사용할 수 없다..
>
> 그래서.. 제가 가장 알고 싶은 것은
> 1) Excel Ole 객체를 사용할 때 파일 오픈, 프린팅, 닫기..
> 2) Powerpoint Ole 객체를 사용할 때 파일 오픈, 프린팅, 닫기..
> 입니다.
>
> 아래 코드 상에 에러가 나는 부분들 체크해 드릴 테는 "대가"님들의 조언 부탁드립니다. Please...
>
>
> unit Unit1;
>
> interface
>
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Comobj,Dialogs,
> StdCtrls;
>
> type
> TForm1 = class(TForm)
> Button1: TButton;
> Button2: TButton;
> Button3: TButton;
> Button4: TButton;
> Button5: TButton;
> Button6: TButton;
> procedure Button1Click(Sender: TObject);
> procedure Button2Click(Sender: TObject);
> procedure Button3Click(Sender: TObject);
> procedure Button4Click(Sender: TObject);
> procedure Button5Click(Sender: TObject);
> procedure Button6Click(Sender: TObject);
> private
> { Private declarations }
> public
> { Public declarations }
> end;
>
> var
> Form1: TForm1;
>
> implementation
> var
> MsWord : OleVariant;
> Sheet : OleVariant;
> ppt : OleVariant;
> {$R *.DFM}
>
> procedure TForm1.Button1Click(Sender: TObject);
> //var
> // MsWord : OleVariant;
> begin
> MsWord := CreateOleObject('Word.Basic');
> MsWord.FileOpen('c:test1.doc');
>
> MsWord.FilePrint(1);
> MsWord.FileClose(2);
>
> showMessage('파일 프린트되었음. 파일 닫았음');
>
> MsWord.FileOpen('c:test2.doc');
>
> MsWord.FilePrint(1);
> MsWord.FileClose(2);
>
> showMessage('파일 프린트되었음. 파일 닫았음');
>
> end;
>
> procedure TForm1.Button2Click(Sender: TObject);
> begin
> MsWord.AppClose;
> end;
>
> procedure TForm1.Button3Click(Sender: TObject);
> begin
> Sheet := CreateOleObject('Excel.Application'); //<-- word와 같이
> // Excel.basic으로 하면 에러
> // 발생
> Sheet.FileOpen('c:test1.xls'); // <---- 에러 발생.. fileopen 메소드지원안함
>
> Sheet.FilePrint(1); // <-- 아래의 코드부터는 위의 에러때문에 진행되지 않음
> Sheet.FileClose(2); // 아마도 이 메소드도 지원하지 않을 듯함
>
> showMessage('파일 프린트되었음. 파일 닫았음');
>
> Sheet.FileOpen('c:test2.xls'); // 위와 마찬가지 일듯..
>
> Sheet.FilePrint(1);
> Sheet.FileClose(2);
>
> showMessage('파일 프린트되었음. 파일 닫았음');
>
> end;
>
> procedure TForm1.Button4Click(Sender: TObject);
> begin
> Sheet.AppClose;
> end;
>
> procedure TForm1.Button5Click(Sender: TObject);
> begin
> ppt := CreateOleObject('PowerPoint.Basic');
> ppt.FileOpen('c:test1.ppt'); //<-- 에러 발생.. fileopen 메소드 지원 안함..
>
> ppt.FilePrint(1); // 아래는 엑셀에서 안되었듯이 안될 듯함..
> ppt.FileClose(2);
>
> showMessage('파일 프린트되었음. 파일 닫았음');
>
> ppt.FileOpen('c:test2.ppt');
>
> ppt.FilePrint(1);
> ppt.FileClose(2);
>
> showMessage('파일 프린트되었음. 파일 닫았음');
> end;
>
>
> procedure TForm1.Button6Click(Sender: TObject);
> begin
> ppt.AppClose;
> end;
>
> end.
procedure TForm1.Button1Click(Sender: TObject);
var
msppt : variant ;
begin
msppt := CreateOleObject('Powerpoint.Application') ;
msppt.visible := true ;
msppt.Presentations.open('C:My Documents감사.ppt') ;
// 이 부분은 프린트 옵션부분 설정시작
msppt.ActivePresentation.PrintOptions.RangeType := 1 ;
msppt.ActivePresentation.PrintOptions.NumberOfCopies := 1 ;
msppt.ActivePresentation.PrintOptions.Collate := 2 ;
msppt.ActivePresentation.PrintOptions.OutputType := 1 ;
msppt.ActivePresentation.PrintOptions.PrintHiddenSlides := 2 ;
msppt.ActivePresentation.PrintOptions.PrintColorType := 1 ;
msppt.ActivePresentation.PrintOptions.FitToPage := 2 ;
msppt.ActivePresentation.PrintOptions.FrameSlides := 2 ;
msppt.ActivePresentation.PrintOptions.activePrinter := 'ML-8100W/8050WG' ; // 프린터설정
// 이 부분은 프린트 옵션부분 설정끝
msppt.ActivePresentation.PrintOut ;
word , excel의 이용은 검색란에서 검색하시면 충분히 아실 수 있으리라 생각되구요.
ppt부분은 없는거 같아서 올립니다.
msppt.ActivePresentation.PrintOptions.RangeType := 1 ;
상수부분은 원래 비베에서는 정의는 아래와 같습니다.
msppt.ActivePresentation.PrintOptions.RangeType := ppPrintAll;
급한대로 위의 상수부분은 제가 임의의 숫자로 설정했습니다.
자세한 것은 msoffice를 개발하기 위한 문서를 참조하세요.
(아직 저도 그렇게는 안해봤지만요. 아마 되리라 생각됩니다)
그리구요. 단순한 열기,프린트,닫기를 하신다면 shellexecute , shellexecuteEx를
쓰시면 훨씬 코드가 간단하지 않을까 싶은데요.