Вероятно, это может вызвать много вопросов, поэтому я постараюсь быть как можно более конкретным. Я отвечаю за поддержку стороннего приложения, которое использует моя работа. Одна из функций этого приложения - извлечение текстовых документов из файлов .dot с использованием информации из базы данных. Для этого оно использует поля MERGEFIELD. Когда эти данные втягиваются, это позволяет сохранить обычные поля даты и поля печати, но поля createdate (тот, который мне нужен) и поля saveate полностью испорчены. Он сохраняет исходную дату создания шаблона вместо того, чтобы вставлять сегодняшнюю дату в качестве даты создания документа, как обычно делают шаблоны, и делает поле недействительным, так что это обычный текст вместо поля createdate, поэтому вы не можете его обновить. Я не смог найти точного ответа на вопрос, является ли это стандартным поведением, когда поля createdate используются при слиянии писем. Я бы использовал обычные даты, но эти документы можно было редактировать в течение нескольких дней, и в конечном итоге они были преобразованы в PDF для «постоянной» копии. Если вы создадите документ из программы, а затем откроете его на следующий день, он автоматически обновит дату ... не то, что мы хотим, это должен быть тот первый день, когда он был открыт.
У меня было прозрение, когда я использовал сценарий PowerShell для обновления созданного элемента самого шаблона. Сделать это удалось в трех строках с помощью:
$a = Get-Date
$b = Get-Item "Q:\CUSTOM\DATETEST.dot"
$b.CreationTime = $a
Этот скрипт отлично работает, и информация о файлах обновляется. Однако, чтобы слова в документе отразили это, вам нужно войти в Word, обновить поля формы с помощью F9, а затем сохранить его. Даже с обновленной датой создания текст документа Word по-прежнему показывает старую дату, когда вы загружаете документ в Word или из другого приложения, пока вы не обновите и не сохраните шаблоны вручную. Эти формы не защищены, так что это не проблема. Я видел несколько скриптов PowerShell для редактирования файлов Word, но не смог найти ни одного для обновления полей даты. Я попробовал этот скрипт с датой изменения и использованием сохраненных полей в форме, но для этого также потребовалось войти и фактически сохранить форму. Есть ли способ в PowerShell или пакетной программе (или любом другом языке сценариев, на данный момент все равно), который позволил бы мне обновить поля формы в документах, а затем сохранить их, или кто-нибудь может подумать о другом способе решения этой проблемы? У меня есть несколько документов, по которым это нужно делать, поэтому делать это вручную каждое утро тоже нецелесообразно.
РЕДАКТИРОВАТЬ: я нашел следующий код, как прокомментировано ниже. В этом коде я также обнаружил, что мне нужно изменить Documents.Add в Documents.Open. Замечу, что это помогло настроить дату сохранения так, как мне было нужно, но createdate все еще остается загадкой.
$word=new-object -com Word.Application
$doc=$word.Documents.Add($filename)
$word.Visible=$False
$word.ActiveDocument.Fields.Update()
$doc.SaveAs([REF]$filename)
$doc.Close()
$word.Quit()
code $word=new-object -com Word.Application $doc=$word.Documents.Add($filename) $word.Visible=$False $word.ActiveDocument.Fields.Update() $doc.SaveAs([REF]$filename) $doc.Close() $word.Quit()
Это все еще работает не совсем правильно, так как не открывается и не сохраняет их шаблон , а скорее открывает и пытается сохранить .docx. Все еще открыт для предложений. - person SausageBuscuit   schedule 09.01.2013