drukowanie dokumentów Worda

0
procedure TForm1.Button1Click(Sender: TObject);
var 
  ExcelApp: OLEVariant; 
begin 
  ExcelApp := CreateOleObject('Excel.Application');
  try 
    ExcelApp.Workbooks.Open('C:\xyz.xls'); 
    ExcelApp.ActiveSheet.PageSetup.Orientation := xlLandscape;
    ExcelApp.Worksheets.PrintOut; 
  finally 
    if not VarIsEmpty(ExcelApp) then 
    begin 
      ExcelApp.Quit; 
      ExcelApp := Unassigned; 
    end; 
  end; 
end;

Powyższy kod pobrany jest z http://www.torry.net/

Czy jest ktoś w stanie pomóc bądź dostarczyć informacji na temat wykorzystania tej metody do wydrukowania dokumentów Worda bądź StarOffice'a??
Głównie chodzi o możliwość programowego ustawienia liczby drukowanych kopii dokumentów Word i czy tą metodą można również drukować dokumenty StarOffice'a??

Z góry dziękuje za udzielenie wyczerpującej odpowiedzi lub wskazania miejsca w internecie gdzie mógłbym sie czegoś na ten temat dowiedzieć

0

Prawdopodobie (dla Worda, a dla innych podobnie):

procedure TForm1.Button1Click(Sender: TObject);
var 
  ExcelApp: OLEVariant; 
begin 
  ExcelApp := CreateOleObject('Word.Application');
  try 
    ExcelApp.Workbooks.Open('C:\xyz.doc'); 
    ExcelApp.ActiveSheet.PageSetup.Orientation := xlLandscape;
    ExcelApp.Worksheets.PrintOut; 
  finally 
    if not VarIsEmpty(ExcelApp) then 
    begin 
      ExcelApp.Quit; 
      ExcelApp := Unassigned; 
    end; 
  end; 
end;

nazwy zmiennych sobie sam pozmieniaj, bo one nie mają żadnego znaczenia

0

Nie wiem WeeR czy zauważyłeś ale word ma odmienną strukturę dokumentu od excella, i polecenia workbook i worksheet raczej nie sprawdzą sie w wordzie.

Czy jest ktoś ko udzieli mi na ten temat informacji lub wskaże miejsce gdzie można je znaleźć??????

0

Spróbuj wstawić z zakładki servers komonenty wordapplication i worddocument
i spróbuj dopisac coś takiego, u mnie drukowało;)

procedure TForm1.Button1Click(Sender: TObject);
var
WordApp: OLEVariant;
nazwapliku: OleVariant;
t,f:olevariant;
begin
wordapplication1.Connect; //polaczenie z wordem
wordapplication1.Visible:=true; //otwiera sie okno worda
worddocument1.Connect;
nazwapliku:='f:\cos.doc';
worddocument1.ConnectTo(WordApplication1.Documents.Open(nazwapliku, EmptyParam, t, f, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, f));
//wczytanie dokumentu
worddocument1.PrintOutOld; //drukowanie
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
WordApplication1.Disconnect;
worddocument1.Disconnect;
end;

0

Watson DZIĘKI.
O cos takiego mi chodziło, rozbudowałem Twoją procedurę o następujące elementy:

zamiast:
wordapplication1.Visible:=True;
dałem:
wordapplication1.Visible:=False;
ponieważ otworzenie Worda w danym momencie jest zbyteczne.

A drugą rzeczą było rozbudowanie funkcji drukowania:
zamiast:
worddocument1.PrintOutOld;
wrzuciłem
worddocument1.PrintOutOld(EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, Copies);

gdzie Copies oznacza liczbę kopi dokumentu do wydrukowania, a to był główny powód szukania ratunku w dokumentach Worda

Dzięki za cenną wskazówkę

0

Jeszcze jedno pytanko.
Procedurka Watsona działa tak jak powinna.
Jest jeden problem.
Po zakończeniu wszelkich zadań w Wordzie na liście procesów w menedżerze zadań Windows pozostaje wpis WINWORD.EXE, czyli proces w zasadzie nie jest zakończony.
Zatem jak skutecznie można wyeliminować tą niedogodność??

0

Maz racje, w menedżerze pozostaje wpis WINWORD.EXE, spróbuj zamienić procedurke
procedure TForm1.FormDestroy(Sender: TObject);
begin
WordApplication1.Disconnect;
worddocument1.Disconnect;
end;

na procedurke

procedure TForm1.FormDestroy(Sender: TObject);
begin
WordApplication1.quit;
WordApplication1.Disconnect;
worddocument1.Disconnect;
end;

u mnie pomogło;)!!

0

U mnie też pomogło, DZIĘKI [hurra]

0

Witajcie Forumowicze.
Borykam się z problemem jak przekazać do pliku worda parametry...
Chodzi mi o coś takiego mam dokument zapisany w pliku doc w nim jest tabelka i dwa pola imie i nazwisko, owe pola chciałbym wypełnić danymi podawanymi jako parametr np. winword c:\dokument.doc Jan Kokosik (uruchomione przez shellexecute) lub jak podano w przykładzie wyżej.
Pozdrawiam.

Witajcie.
Kombinowałem z wyżej postawionym problemem i nie dałem mu rady :/ ale ?urodził? się nowy pomysł jak umieścić na końcu strony tabele dwie kolumny i dwa wiersze (przyjmując że połowa strony dokumentu .doc jest już zajęta jakimś tekstem)
Pierwsza kolumna pierwszy wiersz na stałe wpisane Imię, pierwsza kolumna drugi wiersz
Nazwisko wpisane na stałe (jako opis), teraz druga kolumna pierwszy wiersz wpisanie stringu ze zmiennej i to samo druga kolumna drugi wiersz.
Moje pytanie jest takie, jak ?utworzyć? tabele i wypełnić jej pola w istniejącym już doc-u na końcu strony.
Proszę o info, sugestie, faq, przyład co macie ;)
Pozdrawiam

0

Witam.
doSZEDŁem do dopisywania nowej lini, kożystając z kodu podanego przez Pana Watson
wygląda to tak:
begin{begin4}
nazwapliku:=ExtractFilePath(Application.ExeName)+''+nazwadoku+'.doc';
wordapplication1.Connect; //polaczenie z wordem
wordapplication1.Visible:=true; //otwiera sie okno worda
worddocument1.Connect;
worddocument1.ConnectTo(WordApplication1.Documents.Open(nazwapliku, EmptyParam, t, f, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, f)); //wczytanie dokumentu

WordApplication1.Selection.TypeText('dopisany nowy tekst'); //dopisana nowa linia

           Worddocument1.PrintOutOld;  //drukowanie
           WordApplication1.quit;
           WordApplication1.Disconnect;
           worddocument1.Disconnect;

end;

Moje pytanie "jak przeskoczyć na koniec dokumentu i jak wstawić tabele" ?
Bo teraz dopisuje tekst na samym początku :/
(ps. nie edytuje postu bo nie pojawił by sie jako pierwszy ;) )
Pozdrawiam

Siemanko.
Udało mi się posklejać taki kodzik...
Mam kolejne pytanie, jak obejść komunikat przy zamykaniu dokumentu bo w tej chwili word pyta czy zapisać zmiany czy anulować....
I jeszcze jedno w tej chwili tabela tworzy mi się na początku dokumentu (przed tekstem który już istnieje w doku) jak mam więc wstawić tą tabele na koniec.
Podziękowanie dla Pana ?jozkan? za pomoc !!!
Pozdro

Uses ComObj;
var
WordApp,WordTable,Doc: OLEVariant;
nazwapliku: OleVariant;
t,f: OleVariant;
nrfaktury:integer;
data:string;
i, j: Integer;
begin
nazwapliku:=ExtractFilePath(Application.ExeName)+''+plik+'.doc';
WordApp := CreateOleObject('Word.Application');
WordApp.Visible:=true;
WordDocument1.ConnectTo(WordApplication1.Documents.Open(nazwapliku, EmptyParam, t, f, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, f)); //wczytanie dokumentu

// WordDocument1.Content.InsertAfter(#13);
WordTable :=WordDocument1.Tables.Add(WordApplication1.Selection.Range, 2, 2,EmptyParam,EmptyParam);
for i := 1 to 2 do
for j := 1 to 2 do
begin
if ((i=1) and (j=1)) then WordTable.Cell(i, j).Range.Text:='Imię :';
if ((i=1) and (j=2)) then WordTable.Cell(i, j).Range.Text:=zmienna_imie;
if ((i=2) and (j=1)) then WordTable.Cell(i, j).Range.Text:= 'Nazwisko :';
if ((i=2) and (j=2)) then WordTable.Cell(i, j).Range.Text:=zmienna_nazwisko;
end;

  • worddocument1.PrintOutOld; *drukowanie
    Sleep(1000);
    WordApplication1.Quit;
    WordApplication1.Disconnect;
    worddocument1.Disconnect;
    end;

Podpowiedzcie mi jak mam dodać tą tabelkę za istniejącym tekstem w doku bo już nic mi do pustej głowy nie przychodzi :/
pozdro

0

Witam.
Dostałem dziś drukare i testuje ten kodzik co podałem wyżej.. jednym słowem klocek :( tabela niby w wordzie jest ale na wydruku jej nie ma tylko sam tekst z jej krotek się drukuje [???]
A temat z wydrukowaniem tabeli za teksem już istniejącym nadal aktualny, jak też z zamknięciem worda bez pytania czy zapisać zmiany.
Mądre głowy proszę help me ;(

0

nie wiem, czy ktoś o tym wspomniał, ale wystarczy

  1. odpalić worda
  2. dodać nowe makro
  3. zrobić to co się chce (np. dodać tabelkę, sformatować ja, itp)
  4. zakończyć zapisywanie makra
  5. przejść do kodu makra
    i tam wszystko po kolei pisze co trzeba w Delphi zrobić
0

Dzieki Misiekd, za pomysła ;)
Zarejestrowałem nowe makro, wygląda to tak:
Sub Makro1()

Selection.MoveDown Unit:=wdLine, Count:=28
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _
    2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
    wdAutoFitFixed

End Sub

Pierwsza rzecz to przechodzenie na koniec dokumentu, w makro jest zapisane 28 skoków o wiersz w dół, a jak mam 4 dokumenty i w każdym tekst kończy się na innej linii to już nie pasi :/ , w delphi znalazłem chyba odpowiednik tej funkcji to WordApplication1.Selection.MoveEnd({nie wiem co tu podać za parametr},30);
(zakładam że ma przeskoczyć o 30 wierszy)... a jest może funkcja mówiąca idź za ostatni zapisany wiersz ??
Ale z tymi DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed to już nic nie kumam :/
Proszę o dalsze sugestie.
Pozdro hej

0
keinxor napisał(a)

Dzieki Misiekd, za pomysła ;)

nie ma za co :)

Zarejestrowałem nowe makro, wygląda to tak:
Sub Makro1()

Selection.MoveDown Unit:=wdLine, Count:=28
ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _
    2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
    wdAutoFitFixed

End Sub

Pierwsza rzecz to przechodzenie na koniec dokumentu, w makro jest zapisane 28 skoków o wiersz w dół, a jak mam 4 dokumenty i w każdym tekst kończy się na innej linii to już nie pasi :/ , w delphi znalazłem chyba odpowiednik tej funkcji to WordApplication1.Selection.MoveEnd({nie wiem co tu podać za parametr},30);
(zakładam że ma przeskoczyć o 30 wierszy)... a jest może funkcja mówiąca idź za ostatni zapisany wiersz ??

wystarczyło wcisnąć CTRL+END - skok na koniec dokumentu i masz
Selection.EndKey Unit:=wdStory

Ale z tymi DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
wdAutoFitFixed to już nic nie kumam :/
Proszę o dalsze sugestie.

a co to ma robić?

0
Misiekd napisał(a)

a co to ma robić?

Cześć.
No mnie się wydaje że to są jakieś właściwości tabeli...
Swoją drogą to i tam mam problem z zapisaniem tego w delphi (cienias jestem ;P ale się staram)
z tym "Selection.EndKey Unit:=wdStory" to w delphi znalazłem "chyba odpowiednik"
WordApplication1.Selection.EndKey({co tu podać?},{co tu podać?});
i jak ominąć komunikat worda o zapisie zmian w pliku, po prostu ma to działać tak jest plik z tekstem otwieram go na jego końcu wstawiam tabelke z danymi z programu i drukuje po czym zamykam dokument bez zapisu zmian.

Misiekd jesli możge prosić o pomoc...
pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1