01. april 2004 - 15:18
Der er
1 løsning
udskriv område i worddokument fra Delphi
Jeg har et worddokument, som jeg gerne vil skrive ud fra delphi. I Word-dokumentet er det kun et bestemt område, jeg skal skrive ud. Sidetallene på dette område kender jeg ikke.
Jeg har fat i word med det rigtige dokument i fra Delphi, men kan jeg fra delphi angive et udskriftsområde, og så kun skrive dette ud, evt ved hjælp af bookmarks eller sektionsskift, eller er der nogen, der har en bedre ide.
15. april 2004 - 11:13
#1
Når der ikke er andre, der gider svare, så må jeg vel hellere selv yde lidt for at få mine points igen. Her er en løsning, jeg nu har fået til at virke, hvis der er andre, der skulle være interesserede.
I projektet skal der først vælges "Import Type libary", og her importeres "Microsoft Word x.x object libary"
procedure TForm1.Button2Click(Sender: TObject);
var
WordApp, Doc, BookmarkName, R, RStart, RSlut, : OleVariant;
StartSide, SlutSide : String;
begin
// assign OleObject
try
Button2.Enabled := False;
try
WordApp := GetActiveOleObject('Word.Application');
except
on EOleSysError do
try
WordApp := CreateOleObject('Word.Application');
except
on EOleSysError do
begin
Exit;
end;
end;
end;
WordApp.Visible := False;
// open doc file
try
WordApp.Documents.open(ExtractFilePath(ParamStr(0)) + 'filnavn.doc');
// dokumentet ligger samme sted som programmets exe-fil
Doc := WordApp.ActiveDocument;
except
on E:EOleException do // doc file not found
begin
MessageDlg(E.Message, mtError, [mbOk], 0);
Exit;
end;
end;
BookmarkName := 'bogmærkenavn';
// navnet på det bogmærke, på den side, hvor der skal udskrives fra
if Doc.Bookmarks.Exists(BookmarkName) then
begin
R := Doc.Bookmarks.Item(BookmarkName).Range;
// Hent sidenummeret, hvor bogmærket er
StartSide := R.Information[wdActiveEndPageNumber];
// Antal sider i dokumentet. Jeg vil skrive ud fra bogmærket
// og resten af dokumentet.
SlutSide := WordApp.ActiveDocument.Content.Information
[wdNumberOfPagesInDocument];
WordApp.ActiveDocument.PrintOut(False,
EmptyParam,
wdPrintFromTo,
EmptyParam,
StartSide,
SlutSide);
{ Hvis det i stedet kun er teksten mellem to bogmærker, der skal skrives ud, kan det gøres med en selection mellem to bogmærker
R := WordApp.ActiveDocument.Range(Doc.Bookmarks.Item('UdskrivStart').Range.Start, Doc.Bookmarks.Item('UdskrivSlut').Range.End);
R.Select;
WordApp.ActiveDocument.PrintOut(False,
EmptyParam,
wdPrintSelection);
}
end;
finally
if not VarIsEmpty(WordApp) then
begin
Doc.Close;
WordApp.DisplayAlerts := False;
WordApp.Quit;
end;
Button2.Enabled := True;
end;
end;