Можно ли хранить скрытые метаданные, привязанные к определенной таблице или ячейке в документе Word?

Я пытаюсь сохранить метаданные (в основном уникальный идентификатор) вместе с каждой ячейкой таблицы в документе Word. В настоящее время для надстройки, которую я разрабатываю, я запрашиваю базу данных и создаю таблицу внутри документа Word, используя полученные данные.

Я хочу иметь возможность сохранять любые изменения пользователя в документе и сохранять их обратно в базу данных. Моя первоначальная мысль заключалась в том, чтобы хранить уникальный идентификатор вместе с каждой ячейкой в ​​таблице, чтобы я мог сказать, какие записи обновлять. Я также хотел бы сохранить какой-то флаг «isChanged» в каждой ячейке, чтобы я мог определить, какие ячейки были изменены. Я обнаружил, что могу добавить необходимую информацию в свойство «ID» ячейки, однако эта информация не сохранялась, если пользователь сохранял документ, закрывал его и снова открывал. Затем я попытался сохранить данные, добавив данные в коллекцию «Поля», но это не сработало и вызвало ошибку времени выполнения. Вот код, который я пробовал:

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

Это компилируется нормально, но выдает эту ошибку времени выполнения «Эта команда недоступна».

Так возможно ли это вообще? Или я иду в неправильном направлении?

Заранее спасибо.


person leftend    schedule 29.03.2010    source источник
comment
На какую версию Word вы ориентируетесь? Это документ XML, документ Word 2007, форматированный текст?   -  person AMissico    schedule 29.03.2010
comment
Извините, надо было упомянуть об этом раньше. Нацелена на версию 2007, и это документ Word 2007.   -  person leftend    schedule 29.03.2010


Ответы (2)


Я использовал «ContentControls» для хранения необходимой мне информации. Я использовал поле «Название» для хранения уникального идентификатора и поле «тег», чтобы отслеживать, было ли поле изменено или нет. См. эту ссылку для получения дополнительной информации: http://blogs.technet.com/gray_knowlton/archive/2010/01/15/associating-data-with-content-controls.aspx

person leftend    schedule 30.03.2010
comment
Я совсем забыл об этих элементах управления. Извиняюсь. - person AMissico; 30.03.2010
comment
Извинений не требуется — чем больше я копаюсь в разработке надстроек, тем больше понимаю, насколько это сложно! Еще раз спасибо за ваш ответ, как я уже сказал, он действительно указал мне правильное направление. - person leftend; 31.03.2010
comment
К сожалению, это не работает для старого формата .doc, поскольку свойства Word.Table.Title и Word.Table.Descr были добавлены с введением формата OpenXML. Для .doc-файлов мне еще предстоит найти удовлетворительное решение, так как добавление комментариев к Word.Table.Range всегда будет запускать вид ревизии, когда .doc открывается в подпрограмме, такой как word-viewer. - person M463; 02.08.2016

Поскольку «Документ Word 2007» представляет собой XML, вы можете добавить пространство имен в документ, а затем обожать элементы с атрибутами из вашего пространства имен. Word должен игнорировать ваше пространство имен при загрузке и сохранении. Более того, вы можете добавлять новые элементы для хранения любой необходимой информации (метаданных).

При этом я не использовал эту технику с Word, но успешно сделал это с Excel 2003.

Первое, что нужно попробовать, это создать голый «Документ Word 2007». В вашем случае добавьте простую таблицу два на два. Откройте его с помощью текстового или XML-редактора и добавьте свое пространство имен, обожайте атрибут и добавьте элемент. Откройте в Word, внесите изменения и сохраните их. Откройте с помощью редактора и убедитесь, что ваш атрибут пространства имен и элемент не были изменены.

person AMissico    schedule 29.03.2010
comment
Спасибо за помощь! Я не смог заставить это работать, но это определенно заставило меня двигаться в правильном направлении. - person leftend; 30.03.2010