Zastanawiałeś się kiedyś jak można by zrobić jakiś prosty system tagów w treści narzędzi office? Na przykład jak zrobić coś co umożliwi szybką i łatwą aktualizację treści dokumentów w zależności od jakiś parametrów. Dla przykładu by Odbyła się w Polsce posiadało możliwość podmiany Polsce na inny kraj? Ja osobiście nie raz się zastanawiałem. Zawsze znajdowałem różne rozwiązania. Jednak nigdy nie podjąłem się implementacji takiego rozwiązania aż do teraz.

Dziś chciałbym się z Tobą podzielić swoimi przemyśleniami oraz sposobami jakie próbowałem i na jakich w końcu poprzestałem i dlaczego tak a nie inaczej. Podczas podróży napotkałem na wiele problemów i moim zdaniem dalej nie znalazłem idealnego rozwiązania które by mnie satysfakcjonowało. Dokładniej moja podróż uświadomiła mnie, ile razy byłem w błędzie myśląc o tym, że znalazłem rozwiązanie które NA PEWNO zadziała.

Field w Office

To jedno z podstawowych rozwiązań o jakich można pomyśleć. W Wordzie możemy wstawiać takie pola jak data, wyrażenia matematyczne, strona itp. Ogólnie istnieje system umożliwiający nam wstawianie znaczników które można łatwo aktualizować – wystarczy zrobić na nich update i tyle. Opcja bardzo fajna i z miejsca się nasuwa, że coś takiego można by zrobić dla naszych znaczników.

Rozwiązanie jest o tyle fajne, że załatwia to nam wszystkie problemy na jakie moglibyśmy trafić: jest wpierane przez office, samo się aktualizuje, nie umożliwia zmiany (jedynie skasowanie). Dobry system? Moim zdaniem bardzo dobry. Problem jednak w tym, że:

  • Działa on tylko w Wordzie
  • Nie można tworzyć custom field (* patrz jeden z punktów niżej)

A więc pomysł właśnie legł w gruzach.

Własności dokumentu (* do tego się odwoływałem)

Kolejnym pomysłem na jaki można wpaść to, że na pewno da się wykorzystać jakieś konkretne pola z pliku by potem je wyświetlić. I tak, da się, w Wordzie jesteśmy wstanie odwołać się do każdej własności pliku w tym i takich, które sami stworzymy. Opcja jest wbudowana – zarówno tworzenia jak i czytania/wyświetlania. Więc jednak istnieje opcja stworzenia custom field – trochę inaczej, ale zawsze jakaś.

Tylko że:

  • Działa to tylko i wyłącznie w Wordzie

To znaczy, możemy tworzyć i edytować te własności w każdym produkcie Office (tym podstawowym, bez visio itp.) ale tylko w Wordzie możemy z tych własności skorzystać.

Smart Tags

Kolejna opcja, która może się nasuwać… ale zanim wytłumaczę co to Smart Tags powiem tak, zostały już usunięta z office wiec nie ma co sobie nimi głowę zawracać.

Specjalne słowa kluczowe

Dochodzimy do ostatniego rozwiązania – specjalnego klucza, który oznacza miejsca wstawienia tekstu. Dla przykładu [%FIELD_KEY%] – coś co umożliwi nam szybkie znalezienie tekstu i jego zamianę jak będzie trzeba. Rozwiązanie jest jednak fatalne, działające, ale fatalne.

Problemy rozwiązania:

  • Nie znamy wartości pola – jako użytkownicy końcowi;
  • Zmiany nie są widoczne w dokumencie;
  • Trzeba oprogramować sposób “finalizacji” dokumentu by te klucze zostały zamienione na właściwe;
  • Jest to słowo kluczowe które trzeba pamiętać – więc wstawianie go w nowe miejsca albo wymaga wiedzy użytkownika jakie to słowo, albo ekstra kodu, który to będzie robił.

Zalety rozwiązania:

  • Działa w każdym narzędziu office

Jak to trzeba zrobić? A to już inna szkoła jazdy. Ogólnie trzeba się nieźle napracować i zadecydować, kiedy i jak te słowa kluczowe będą podmieniane na inne i co ma stać jak już będziemy chcieli zmienić wartości już zmienione. Więc pod względem UX to rozwiązanie jest najgorsze, jednak jest zarówno najlepszym jakie można by wprowadzić w wszystkie narzędzia office.

Słownik słów

Ogólnie słownik słów które mają być wykryte i podmienione na jakieś wartości. Czyli za każdym razem, kiedy napiszemy “Część” to ostanie to zamienione na odpowiednią wersję językową albo imię. Ale zamieniona przez nas za pomocą full text search.

Problemy rozwiązania:

  • Przeszukiwania dużych dokumentów;
  • Nie każde słowo jest/wrażenie powinno być zamienione (więc trzeba dać możliwość użytkownikowi decydowania);
  • Implementacja zamiany/wstawiania jest inna per aplikacja.

Zalety rozwiązania:

  • Działa w każdym produkcie Office;
  • Użytkownik widzi aktualną wartość;
  • Nie trzeba tworzyć finalizacji dokumentu.

Podsumowanie

Jak widać wydawałoby się taka prosta rzecz a tak ciężko jest ją wykonać. Tak naprawdę nie ma możliwości wykonania jej jednorazowo dla wszystkich narzędzi office, dla każdego trzeba pisać osobne zdarzenia i kody na podmianę. Nie możemy też wykorzystać tego co daje nam office – własnych własności pliku.

Ja znalazłem takie opcje, czy są inne? Mam nadzieję, że tak, bo mi się moje (nie licząc własności dokumentów) nie podobają. Wręcz mam awersję do każdego z nich (nawet tego, który mi się podoba). Jeżeli znasz lepsze rozwiązanie, proszę podziel się. Jeżeli nie znasz a post pomógł to też proszę skomentuj.

PS: Ja poszedłem dla Worda z Custom Fields a dla reszty ze słownikiem.

2 KOMENTARZE

  1. Cześć,
    Szukałem innych sposobów (spoiler: i nie znalazłem:), z tym, że zależało mi na jak najbardziej ogólnym rozwiązaniu. Docelowo miało działać z xlsx, docx, xlsm, vsd, niezależnie od formatowania i miejsca występowania słowa-klucza w dokumencie, słownik nie predefinowany tylko tworzony na podstawie wrzuconych dokumentów, ograniczony dobór technologii (w sumie to ograniczony do javy 1.7). Pomogłem sobie Apache POI i działa to całkiem nieźle dla docxa i xlsxa – nie zajmowałem resztą, bo w międzyczasie okazało się, ze zapotrzebowanie się zmieniło.

    Tutaj link:
    https://bitbucket.org/rdim/preagg_2

    kod strasznie syfiasty, ale to miał być tylko proof of concept.

    Grzebanie w produktach office nie należy do najprzyjemniejszych rzeczy – ale twoje dwa posty na ten temat były dla mnie bardzo przydatne. Mam nadzieję że coś jeszcze napiszesz:)

    • dzieki, na kod juz patrze :) no, office strasznie syfiasty jest i troche nie przewidywalny :(

      A o office pewnie jeszcze bedzie ;) za dlugo sie z tym… by nie napisac :)

Comments are closed.