2010-03-29 10 views
5

Próbuję przechowywać metadane (w zasadzie unikalny identyfikator) wraz z każdą komórką tabeli w dokumencie programu Word. Obecnie dla dodatku, który rozwijam, przeszukuję bazę danych i buduję tabelę wewnątrz dokumentu programu Word przy użyciu danych, które są pobierane.Czy można przechowywać ukryte informacje o metadanych powiązane z określoną tabelą lub komórką w dokumencie programu Word?

Chcę móc zapisać dowolne zmiany wprowadzone przez użytkownika w dokumencie i zachować je w bazie danych. Moją początkową myślą było przechowywanie unikalnego identyfikatora wraz z każdą komórką w tabeli, aby móc stwierdzić, które rekordy mają zostać zaktualizowane. Chciałbym również zapisać flagę "isChanged" w każdej komórce, aby móc stwierdzić, które komórki zostały zmienione. Zauważyłem, że mogę dodać potrzebne informacje do właściwości "ID" komórki - jednak informacje te nie zostały zachowane, jeśli użytkownik zapisał dokument, zamknął go i ponownie go otworzył. Następnie próbowałem przechowywać dane, dodając dane do kolekcji "Fields" - ale to nie zadziałało i spowodowało błąd runtime. Oto kod, który próbowałem:

object t1 = Word.WdFieldType.wdFieldEmpty; 
object val = "myValue: " + counter; 
object preserveFormatting = true; 
tbl.Cell(i, j).Range.Fields.Add(tbl.Cell(i, j).Range, ref t1, ref val, ref preserveFormatting); 

Kompiluje dobrze, ale zgłasza ten błąd środowiska wykonawczego "To polecenie nie jest dostępne".

Czy to w ogóle możliwe? Czy kierujemy się w złym kierunku?

Z góry dziękuję.

+0

Którą wersją programu Word kierujesz? Czy to jest dokument XML, dokument Word 2007, format Rich Text? – AMissico

+0

Przepraszam, powinienem już o tym wspomnieć. Kierowanie na wersję 2007, a jest to dokument Word 2007. – leftend

Odpowiedz

1

Porysowałem używając "ContentControls" do przechowywania potrzebnych informacji. Użyłem pola "Tytuł" do przechowywania unikalnego identyfikatora i pola "tag" do śledzenia, czy pole zostało zmienione, czy nie. Zobacz ten link, aby uzyskać więcej informacji: http://blogs.technet.com/gray_knowlton/archive/2010/01/15/associating-data-with-content-controls.aspx

+0

Całkowicie zapomniałem o tych kontrolkach. Przepraszam. – AMissico

+1

Nie trzeba przepraszać - im bardziej zajmuję się rozwojem dodatków, tym bardziej zdaję sobie sprawę, jak skomplikowane jest to! Jeszcze raz dziękuję za odpowiedź, tak jak powiedziałem, to naprawdę wskazało mi właściwy kierunek. – leftend

+0

Niestety, to nie działa dla "starego" formatu .doc, ponieważ 'Word.Table.Title' oraz' Word.Table.Descr' są właściwościami, które zostały dodane wraz z wprowadzeniem formatu OpenXML. Dla plików .doc, jeszcze nie znalazłem satysfakcjonującego rozwiązania, ponieważ dodawanie komentarzy do 'Word.Table.Range' zawsze wywoła widok rewizji, aby włączyć się, gdy plik .doc jest otwarty w podprogramie jak przeglądarka słów. – M463

1

Ponieważ "dokument Word 2007" to XML, możesz dodać do niego przestrzeń nazw, a następnie uwielbiać elementy z atrybutami z twojej przestrzeni nazw. Program Word powinien zignorować obszar nazw podczas ładowania i zapisywania. Co więcej, możesz dodać nowe elementy do przechowywania wszelkich potrzebnych informacji (metadanych).

Z powiedział, że nie użyłem tej techniki ze słowem, ale zrobili to z powodzeniem przy użyciu programu Excel 2003.

Pierwszą rzeczą, aby spróbować, to stworzyć bare „Word 2007 dokumentu”. W twoim przypadku dodaj prostą tabelkę po dwóch. Otwórz go za pomocą edytora tekstu lub XML i dodaj swoją przestrzeń nazw, uwielbiaj atrybut i dodaj element. Otwórz za pomocą programu Word, a następnie zapisz zmiany. Otwórz za pomocą edytora i upewnij się, że atrybut i element przestrzeni nazw nie zostały zmienione.

+0

Dzięki za pomoc! Nie byłem w stanie sprawić, żeby to działało, ale z pewnością sprawiło, że poszedłem we właściwym kierunku. – leftend