Avatar billede moller2567 Nybegynder
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.
Avatar billede moller2567 Nybegynder
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;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester