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
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
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...
non è difficile, ti serve qualcosa tipo questo
(non l'ho compilato, vado a memoria)
E' una procedura lenta, ma funziona.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;
Ovviamente ci devi mette try..except, verifiche sull'esistenza dei file e "roba varia", questa è l'idea
grzie.... inizio a fare qualche prova.
Ciao, unisco cosi:
ciaocodice: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;
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
grazie... verifichero facendo quante più prove possibili.
hai qualche suggerimento anche riguardo l'unione di file PDF?
grazie
pdftk e passa la pauraOriginariamente inviato da 123delphi321
grazie... verifichero facendo quante più prove possibili.
hai qualche suggerimento anche riguardo l'unione di file PDF?
grazie
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...Originariamente inviato da franzauker
pdftk e passa la paura
in alternativa c'è un componente che usavo (una volta), ma... pdftk e passa la paura
quindi tu dici di richiamarlo dal programma Delphi con shellexecutive?
grazie
sì (per la precisione c'è pure per linux e bsd)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
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)