2010-03-29 7 views
5

Sto cercando di memorizzare i metadati (fondamentalmente un ID univoco) insieme a ciascuna cella di una tabella in un documento di Word. Attualmente, per il componente aggiuntivo che sto sviluppando, sto interrogando il database e creando una tabella all'interno del documento Word utilizzando i dati che vengono recuperati.È possibile memorizzare informazioni di metadati nascoste che sono legate a una tabella o cella specifica all'interno di un documento di Word?

Desidero poter salvare qualsiasi modifica dell'utente sul documento e mantenerlo nel database. Il mio pensiero iniziale era quello di memorizzare un id univoco insieme a ciascuna cella nella tabella in modo che sarei in grado di dire quali record aggiornare. Vorrei anche memorizzare una sorta di flag "isChanged" all'interno di ogni cella in modo che potessi dire quali celle sono state cambiate. Ho scoperto che potevo aggiungere le informazioni necessarie nella proprietà "ID" della cella, tuttavia, tali informazioni non venivano conservate se l'utente ha salvato il documento, chiuso e riaperto. Ho quindi provato a memorizzare i dati aggiungendo un dato alla raccolta "Campi", ma ciò non ha funzionato e ha generato un errore di runtime. Ecco il codice che ho provato:

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); 

Questo compila bene, ma getta questo errore runtime "Questo comando non è disponibile".

Quindi, questo è possibile a tutti? O sono diretto nella direzione sbagliata?

Grazie in anticipo.

+0

Quale versione di Word è destinata? Si tratta di un documento XML, documento Word 2007, formato RTF? – AMissico

+0

Mi dispiace, avrei dovuto dirlo prima. Targeting versione 2007 e questo è un documento di Word 2007. – leftend

risposta

1

Eliminato utilizzando "ContentControls" per memorizzare le informazioni necessarie. Ho usato il campo "Titolo" per memorizzare l'ID univoco e il campo "tag" per tracciare se il campo era stato modificato o meno. Vedere questo collegamento per ulteriori informazioni: http://blogs.technet.com/gray_knowlton/archive/2010/01/15/associating-data-with-content-controls.aspx

+0

Mi sono completamente dimenticato di questi controlli. Scusate. – AMissico

+1

Nessuna scusa necessaria - più mi occupo dello sviluppo di componenti aggiuntivi, più mi rendo conto di quanto sia complicato! Grazie ancora per la tua risposta, come ho detto, mi ha davvero indirizzato nella giusta direzione. – leftend

+0

Sfortunatamente, questo non funziona per il "vecchio" .doc-Format, come 'Word.Table.Title' così come' Word.Table.Descr' sono proprietà che sono state aggiunte con l'introduzione del formato OpenXML. Per i file .doc, devo ancora trovare una soluzione soddisfacente, poiché l'aggiunta di commenti a 'Word.Table.Range' attiverà sempre la vista di revisione da avviare quando il .doc viene aperto in un sottoprogramma come il visualizzatore di parole. – M463

1

Poiché un "Documento di Word 2007" è XML, è possibile aggiungere uno spazio dei nomi al documento e quindi adorare gli elementi con gli attributi del proprio spazio dei nomi. Word dovrebbe ignorare il tuo spazio dei nomi durante il caricamento e il salvataggio. Inoltre, puoi aggiungere nuovi elementi per memorizzare qualsiasi informazione (metadata) necessaria.

Detto questo, non ho usato questa tecnica con Word, ma l'ho fatto con successo utilizzando Excel 2003.

prima cosa da provare, è creare un nudo "Documento Word 2007". Nel tuo caso, aggiungi una semplice tabella due a due. Aprilo con un editor di testo o XML e aggiungi il tuo spazio dei nomi, e adora un attributo e aggiungi un elemento. Apri con Word fai una modifica e poi salvalo. Apri con editor e assicurati che l'attributo e l'elemento dello spazio dei nomi non siano stati modificati.

+0

Grazie per l'aiuto! Non ero in grado di farlo funzionare, ma sicuramente mi ha fatto andare nella giusta direzione. – leftend

Problemi correlati