2013-06-13 14 views
7

Po prostu podążałem za podejściem nr 2 w przykładzie VariableReplace z docx4j 2.8.1 i wszystko, co robi, polega na usunięciu znaczników zmiennych $ {}.docx4j nie zastępuje zmiennych

Kroki zrobiłem:

  • Otwarty Słowo 2013, wpisane $ {zmienna} jako tekst tylko
  • Zapisano go gdzieś
  • przeczytać w moim programie Java i budować moje HashMap z .put ("zmienna", "TEST");
  • inny kod jest kopiowany i wklejany z powyższego przykładu.
  • zapisywania dokumentu

będę oczekiwać „test” wyłącznie, i dostać tylko „zmienna” bez znaczników w dokumencie wyjściowym.

+0

Podany link jest 404 -edny –

Odpowiedz

19

Bez wątpienia program Word dzieli "zmienną" między przebiegami, z gramatycznymi lub ortograficznymi flagami.

Fix it up z VariablePrepare

Umieść tę linię po instancję WordprocessingMLPackage:

VariablePrepare.prepare(wordMLPackage); 

Następnie można użyć mapowania zastąpić zmienne.

+0

To jest poprawna odpowiedź. Miałem ten sam problem, co Martin i spędziłem ponad godzinę na tak prostej rzeczy :( – Math

+0

To był ratownik! – SimonV

+0

Cześć JasonPlutext dlaczego nie jestem w stanie dodać przebiegów (R) wewnątrz kontroli treści za pomocą zmiennych przygotować? Czy można to zrobić przy użyciu tej klasy, jeśli tak, to jak to zrobić, jeśli nie, jaki będzie twój pomysł na zrobienie tego. – santhanam

1

Zdaję sobie sprawę, że jest to stary post, ale dla innych, którzy się na to natkną, innym powodem, dla którego możesz uzyskać ten wynik, jest to, że masz błędne "klucze" w swojej HashMapie. Więc w moim przypadku był przy moim starym formacie XML jako klucz jak

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

kiedy powinienem być przy użyciu:

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

sam dokument został przy użyciu tagów jak

${variable} 

Kod VariableReplace usunie formatowanie {{}, niezależnie od tego, czy znaleziono dopasowanie. Jeśli więc nie znajduje dopasowania, klucze mogą nie być zgodne z tymi w dokumencie z jakiegoś powodu, a to może nie być ściśle związane z VariablePrepare. Ale był to bardzo pomocny post dla mnie, ponieważ rozwiązanie VariablePrepare, VariableReplace działa teraz dla moich celów.

Ponadto, nie jestem pewien, czy nawet VariablePrepare może obsłużyć przypadek, w którym zmienisz czcionkę, podświetlanie lub inne formatowanie w środku znacznika w dokumencie. W takich przypadkach nie będzie można połączyć tagu w pojedynczy przebieg, więc rozpoznawanie znaczników prawdopodobnie się nie powiedzie.