2013-06-13 9 views
7

Ho appena seguito l'approccio n. 2 nell'esempio VariableReplace da docx4j 2.8.1 e tutto ciò che fa è rimuovere i marcatori variabili $ {}.docx4j non sostituisce le variabili

I passi che ho fatto:

  • Inaugurato Word 2013, digitato $ {variabile} come testo solo
  • salvato da qualche parte
  • leggere nel mio programma Java e costruire la mia HashMap con .Put ("variabile", "TEST");
  • altro codice viene copiato e incollato dall'esempio sopra.
  • salvato il documento

mi aspetto 'TEST' solo, e ottenere solo 'variabile' senza i marcatori nel documento di output.

+0

Il collegamento fornito è 404'ed –

risposta

19

Senza dubbio Word divide la "variabile" tra le esecuzioni, con flag di grammatica o di ortografia.

Fix it con VariablePrepare

Mettete questa riga dopo si crea un'istanza della WordprocessingMLPackage:

VariablePrepare.prepare(wordMLPackage); 

quindi è possibile utilizzare le mappature per sostituire le variabili.

+0

Questa è la risposta corretta. Ho avuto lo stesso problema di Martin e ho passato più di un'ora per una cosa così semplice :( – Math

+0

Questo è stato un risparmiatore di vita! – SimonV

+0

Ciao JasonPlutext perché non sono in grado di aggiungere le esecuzioni (R) all'interno del controllo dei contenuti utilizzando la preparazione delle variabili? È possibile farlo usando quella classe, se sì, come fare, se non è la tua idea di farlo. – santhanam

1

Mi rendo conto che questo è un vecchio post, ma per altri che incappano in questo, un altro motivo per cui è possibile ottenere questo risultato è se si hanno "chiavi" errate nella propria HashMap. Quindi, nel mio caso, stavo usando il mio vecchio formato xml come chiave come

.put("<variable/>","TEST"); 

quando avrei dovuto utilizzare:

.put("variable","TEST"); 

Il documento stesso è stato utilizzando i tag come

${variable} 

Il codice VariableReplace rimuoverà $ {} formattando se una corrispondenza viene trovata o meno. Quindi, se non trova una corrispondenza, le chiavi potrebbero non corrispondere a quelle del documento per qualche motivo, e questo potrebbe non essere strettamente correlato a VariablePrepare. Ma questo è stato un post molto utile per me dal momento che la soluzione VariablePrepare, VariableReplace ora sta lavorando per i miei scopi.

Inoltre, non sono sicuro che anche VariablePrepare possa gestire il caso in cui si modifica il carattere, l'evidenziazione o altra formattazione nel mezzo del tag nel documento. In tali casi, non sarà in grado di unire il tag in una singola esecuzione, pertanto il riconoscimento dei tag probabilmente non riuscirà.