2013-01-09 15 views
5

Questo potrebbe sollevare un sacco di domande, quindi cercherò di essere il più specifico possibile. Sono incaricato di supportare un'applicazione di terze parti utilizzata dal mio lavoro. Una delle funzioni di questa applicazione è estrarre i documenti word dai file .dot con le informazioni da un database inserito. Utilizza i campi MERGEFIELD per fare ciò. Quando questi dati vengono estratti, consente di mantenere i normali campi data e i campi printdate, ma creare (quello di cui ho bisogno) e i campi salvati sono completamente incasinati. Mantiene la data di creazione del modello originale invece di inserire la data odierna come la data di creazione del documento come fanno normalmente i modelli e invalida il campo in modo che sia un testo normale anziché un campo creato, quindi non è possibile aggiornarlo. Non sono riuscito a trovare una risposta esatta sul fatto che si tratti o meno di un comportamento standard quando i campi creati vengono utilizzati con la stampa unione. Vorrei usare le date normali, ma questi documenti potrebbero essere modificati nel corso di alcuni giorni, con la loro conversione definitiva in PDF per una copia "permanente". Se crei il documento dal programma e lo apri il giorno successivo, aggiorna automaticamente la data ... non quello che vogliamo, deve essere il primo giorno in cui è stato aperto.È possibile aggiornare i campi modulo in Documento di Word tramite lo script

Ho avuto l'illusione di utilizzare uno script PowerShell per aggiornare il creato del modello stesso. Riuscito a farlo in tre righe con:

$a = Get-Date 
$b = Get-Item "Q:\CUSTOM\DATETEST.dot" 
$b.CreationTime = $a 

Questo script funziona alla grande e le informazioni sul file vengono aggiornate. Tuttavia, per ottenere le parole effettive nel documento per riflettere questo, devi andare in Word, aggiornare i campi nel modulo con F9, quindi salvarlo. Anche con la data di creazione aggiornata, il testo del documento di testo mostra ancora la vecchia data quando si estrae il documento in Word o dall'altra applicazione finché non si aggiorna e si salvano manualmente i modelli. Queste forme non sono protette, quindi non è un problema. Ho visto alcuni script PowerShell per modificare i file di parole, ma non sono riuscito a trovarne uno per aggiornare i campi delle date. Ho provato questo script con la data di modifica e utilizzando i campi salvati nel modulo, ma questo ha richiesto anche l'entrata e il salvataggio del modulo. C'è un modo in PowerShell o batch (o qualsiasi linguaggio di scripting, non importa a questo punto) che mi consentirebbe di aggiornare i campi del modulo nei documenti e quindi salvarli, o qualcuno può pensare in un altro modo intorno a questo? Ho diversi documenti che avrebbero bisogno di questo, quindi farlo manualmente ogni mattina è anche poco pratico.

EDIT: Ho trovato il seguente codice, come commentato di seguito. In questo codice ho anche scoperto che avevo bisogno di cambiare Documents.Add a Documents.Open. Noterò che questo ha funzionato per far sì che la data di salvataggio fosse manipolata nel modo in cui mi serviva, ma la creazione rimane ancora un mistero.

$word=new-object -com Word.Application 
$doc=$word.Documents.Add($filename) 
$word.Visible=$False 
$word.ActiveDocument.Fields.Update() 
$doc.SaveAs([REF]$filename) 
$doc.Close() 
$word.Quit() 
+0

Trovato il seguente, dopo aver cercato la mia domanda esatta titolo in Google ... non so perché non potevo prima come le mie ricerche erano simili: 'codice $ parola = nuovo-oggetto -com Word.Application $ doc = $ word.Documents.Add ($ filename) $ word.Visible = $ false $ word.ActiveDocument.Fields.Update() $ doc.SaveAs ([REF] $ nomefile) $ doc.Close() $ word.Quit() 'Questo ancora non funziona correttamente dato che non si apre e non salva template, ma apre e tenta di salvare un .docx. Ancora aperto a suggerimenti. –

+1

Benvenuti in SO!Per rendere le cose più leggibili, modifica il tuo post originale con il codice che hai trovato, invece di inserirlo in un commento. – Nick

+0

Grazie per il suggerimento ... non ero sicuro su quale fosse il metodo preferito per aggiungere il codice appena trovato. Ho capito tutto ... ma preferirei usare la data di creazione ma semplicemente non si aggiornerà nemmeno con Fields.Update. Salvato tipo di fare quello che mi serve con il codice di cui sopra, anche se non era il mio intento. –

risposta

2

Per salvare il documento come un modello, utilizzare il seguente codice:

$word = new-object -com Word.Application 
$doc = $word.Documents.add($filename) 
$word.Visible = $False 
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat],"wdFormatTemplate") 
$doc.SaveAs([ref]$filename2,[ref]$saveFormat) 
$doc.Close() 
$word.Quit() 

Questo non è testato per i modelli, ma ho preso a lavorare con il salvataggio come .doc piuttosto che il default .docx. Inoltre, non ti permetterà di salvare il file se è lo stesso nome del file aperto. Ecco perché l'ho cambiato in $filename2. Potrebbe essere necessario eseguire alcuni trucchi di rinomina per farlo funzionare, ma questo dovrebbe superare il problema relativo alla modalità di salvataggio del file.

+0

$ doc = $ Word.Document.open ($ nomefile) anziché Document.Add funziona per i modelli. Tuttavia, come dicevo prima, per qualche motivo le date di creazione non si aggiornano. Userò solo i salvataggi (dato che l'applicazione originale converte entrambi in testo comunque) e la chiamo un giorno. Grazie! –

Problemi correlati