Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315

    [delphi] unire file doc di word

    Ciao a tutti,

    da delphi dovrei unire diversi file di word (doc) in un unico file word (doc)

    qualcuno mi sa dire come fare?
    devo usare qualche componente particolare?

    grazie

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Puoi usare i componenti di Office Automation inclusi in Delphi per accedere alle funzionalità di automazione fornite dagli applicativi Office.

    Hai già fatto una ricerca su Google per vedere se l'argomento non è già stato affrontato (e risolto) altrove?

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    non è difficile, ti serve qualcosa tipo questo
    (non l'ho compilato, vado a memoria)

    codice:
    uses comobj;
    
    var    WordApp:variant;
       WordAppFuso:variant;
    
    begin
     WordAppFuso := CreateOleObject('Word.Application');
     WordAppfuso.visible:=false;
     WordAppFuso.Documents.Open(nome_file_word_vuoto); // consiglio: usa un documento Word vuoto da aprire
     WordappFuso.Selection.wholestory;
     WordappFuso.selection.cut; // in questo modo non devi creare un nuovo documento word, cosa non banale con le 700 versioni diverse di Word
    
    
       WordApp := CreateOleObject('Word.Application');
     (...) qui cicla N volte. Sostanzialmente apri il file, selezioni tutto, copi tutti, chiudi il file, incolli dentro il WordAppFuso
      WordApp.Documents.Open(fileDaAprire);
      WordApp.Selection.wholestory;
      WordApp.Selection.copy;
      WordApp.activedocument.close;
      WordAppFuso.selection.Paste;
    // eventualmente metti questo  WordAppFuso.selection.insertbreak(7); //wdpagebreak
    
    (...)
    
      WordApp.quit(false); 
      WordAppFuso.Documents.Item(1).SaveAs(fileSalvato);
      WordAppFuso.activedocument.close;
      WordAppfuso.quit(false);
      
    end;
    E' una procedura lenta, ma funziona.
    Ovviamente ci devi mette try..except, verifiche sull'esistenza dei file e "roba varia", questa è l'idea

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    grzie.... inizio a fare qualche prova.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    Ciao, unisco cosi:

    codice:
    uses ComObj
    ....
    
    procedure TFrameAssociaWord.BtnCreaFileClick(Sender: TObject);
    const wdPageBreak = $00000007;
    var
      WordApplication, WordDocument: Variant;
      i:integer;
      Sd:TSaveDialog;
    begin
      if cxListBoxFileWord.Count=0 then Exit;
      Sd := TSaveDialog.Create(nil);
      Sd.InitialDir := GetCurrentDir;
      try
        Sd.Filter:='File di Word (*.doc*)|*.doc*|Tutti i File|*.*';
        if Sd.Execute then
         begin
          WordApplication := CreateOleObject('Word.Application') ;
          WordDocument := WordApplication.Documents.Add;
          WordApplication.Visible := False;
    
          for i := 0 to cxListBoxFileWord.Items.Count-1 do
            begin
             //ShowMessage(cxListViewFileWord.Items[i].Caption);
             WordApplication.Selection.InsertFile(cxListBoxFileWord.Items[i]);
             if i<cxListBoxFileWord.Items.Count-1 then
              WordApplication.Selection.InsertBreak(Type:=wdPageBreak);
            end;
    
          WordDocument.SaveAs(sd.FileName,AddToRecentFiles := False) ;
          WordApplication.Quit(False)
         end;
      finally
        screen.Cursor := crDefault;
        Sd.Free;
      end;
    end;
    ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    vado a memoria, ma l'insert determina la modifica di header e footer, il che può non essere bene se devi usare una lettera su carta intestata tipo report.
    inoltre l' "add" può dare problemi con i vari livelli di sicurezza-macro word (è un pezzo che non li uso, ma "a quel tempo" avevo risolto aprendo un file già fatto, cosa che sembrava meno "sospetto" per il Potente Programma Microsoft (se non si capisce sooo iroooniicoooo)

    verifica

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    grazie... verifichero facendo quante più prove possibili.

    hai qualche suggerimento anche riguardo l'unione di file PDF?


    grazie

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da 123delphi321
    grazie... verifichero facendo quante più prove possibili.

    hai qualche suggerimento anche riguardo l'unione di file PDF?


    grazie
    pdftk e passa la paura
    in alternativa c'è un componente che usavo (una volta), ma... pdftk e passa la paura

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,315
    Originariamente inviato da franzauker
    pdftk e passa la paura
    in alternativa c'è un componente che usavo (una volta), ma... pdftk e passa la paura
    ho scaricato pdftk da http://www.pdflabs.com/ ,.... ed è un programma windows...

    quindi tu dici di richiamarlo dal programma Delphi con shellexecutive?

    grazie

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da 123delphi321
    ho scaricato pdftk da http://www.pdflabs.com/ ,.... ed è un programma windows...

    quindi tu dici di richiamarlo dal programma Delphi con shellexecutive?

    grazie
    sì (per la precisione c'è pure per linux e bsd)

    ti serve solo un "waitexecute" (esecuzione sincrona) dandogli come parametri elenco_file cat output file_definitivo.pdf

    Normalmente creo un file .bat temporaneo e lancio quello (il bat), tipicamente per poter veder facilmente i parametri che sono effettivamente eseguiti, da una banale Tstringlist, un add, savetofile
    [in questo caso i parametri son banali, in altri son complicati e non è facilissimo fare eventualmente il debug]

    attenzione a mettere chr(34) prima e dopo i nomi dei file (altrimenti gli spazi incasinano tutto)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.