![]() |
|
#1
|
|||
|
|||
![]() Уважаемые знатоки! Подскажите как мне сделать экспорт в Word данных, которые пользователь будет вводить в поля Edit, подставлять из полей ComboBox, а также из компонента DateTimePicker. Экспорт должен происходить в шаблон документа Word в поля, которые заключены в шаблоне в [квадратные скобки].
Все исходники и файл шаблона в прикрепленном файле. Заранее спасибо все ответившим. |
#2
|
|||
|
|||
![]() Идем в ФАК и читаем про OLE-автоматизацию.
Я рекомендую использовать закладки, т.к. получается быстрее, чем контекстный поиск. |
#3
|
|||
|
|||
![]() Киньте ссылку, что поиском ничего не находит
|
#4
|
|||
|
|||
![]() |
#5
|
|||
|
|||
![]() Сложно это пока для меня. Может хоть на примере одной строки из моей программы покажете. Буду очень признателен.
|
#6
|
|||
|
|||
![]() А там все-равно сложно будет. Посмотри там рядом статьи. Может что попроще найдешь. В принципе, там все есть, что тебе надо. Пробуй, потом выкладывай сюда - будем разбираться.
|
#7
|
|||
|
|||
![]() Самый простой способ экспорта в Word. Используемые модули: ComObj, WordXP
Код:
procedure TForm1.Button3Click(Sender: TObject); var WApp : Variant; S : string; procedure Replace(Lab, Txt : string); begin WApp.Selection.End:=0; WApp.Selection.Start:=0; WApp.Selection.Find.Forward := True; WApp.Selection.Find.Replacement.Text := Txt; WApp.Selection.Find.Text := Lab; WApp.Selection.Find.Execute(Replace:=wdReplaceAll); end; begin try WApp:= CreateOleObject('Word.Application'); except on E : EOleError do begin MessageDlg('MS Word отсутствует на компьютере!', mtError, [mbOk], 0); Exit; end; end; try WApp.DisplayAlerts := false; WApp.Documents.Open('<путь до шаблона>\Шаблон.dot'); //не обязательно шаблон делать как "dot" DateTimeToString(S, 'dd mmm yyyy', DateTimePicker1.DateTime); Replace('[Day1]', S); Replace('[N1]', Combobox1.Text); Replace('[FIO1]', Edit1.Text); //...... WApp.Visible := True; WApp.Selection.End:=0; WApp.Selection.Start:=0; finally WApp := Unassigned; end; end; С датами ему разобраться и все дела (число, месяц и год он пытается делать в три метки). Не забывайте делать резервные копии Последний раз редактировалось san-46, 10.12.2008 в 14:48. |
#8
|
|||
|
|||
![]() 1. По поводу дат: Переделал в 1 метку, получается вот так 01 янв 2008, а как сделать чтобы было 1 января 2008 или 01.01.2008
2. Как сделать чтобы DateTimePicker выдавал по умолчанию текущую дату. Все остальное получилось, огромное спасибо!!! |
#9
|
|||
|
|||
![]() 1. "01.01.2008" по маске в процедуре DateTimeToString: 'dd.mm.yyyy'. Эта функция склонять месяцы не умеет, так что, например, "января" не получится.
Для этого надо разбивать дату на число, месяц, год и своими методами преобразовывать названия месяцев в родительный падеж. Так что, если очень надо именно так, то разбивка на три метки даты может и пригодится. На имени функции нажать F1 в справке смотреть какие символы маски допустимы и что обозначают в Date-Time format. 2. Функция Date возвращате текущую дату (системную), Now - дату и текущее время. Не забывайте делать резервные копии Последний раз редактировалось san-46, 10.12.2008 в 20:43. |
#10
|
|||
|
|||
![]() что то не получается вывести в DateTimePicker текущую дату. В смысле он текущую дает, но если перевести календарь Windows, то остается прежняя дата.
|
#11
|
|||
|
|||
![]() Цитата:
И зачем переводить календарь Windows? Какой в этом смысл для программы? Не забывайте делать резервные копии |
#12
|
|||
|
|||
![]() Запускаю программу, она дает 10.12.2008. Выхожу из программы, перевожу дату на 11.12.2008, запускаю программу, а она все равно дает 10.12.2008, т.е. она типа запоминает старую дату, а надо чтобы всегда текущую выводила.
|
#13
|
|||
|
|||
![]() Код:
procedure TForm1.FormCreate(Sender: TObject); begin DateTimePicker1.DateTime := Date; end; А чего у вас там происходит сейчас никто не возьмется предполагать. Мало ли как вы присваиваете дату. Если в программе нет кода, который сохраняет дату на диске, то никак она сохраниться не может. Не забывайте делать резервные копии |
#14
|
|||
|
|||
![]() А как убрать привязку имени файла doc к конкретному каталогу
в случае если шаблон находится не в каталоге, который прописан в исходном коде? В данном случае ('<путь до шаблона>\Шаблон.dot') |
#15
|
|||
|
|||
![]() Решение зависит от требований задачи. Варианты:
1. Разместить шаблон там же где и приложение (исполняемый файл), тогда каталог вместе с именем файла вытаскивается так: FileName := ExtractFilePath(Application.ExeName)+'шаблон.dot'; 2. Выбирать шаблон с помощью диалога выбора файлов (OpenDialog). 3. Читать расположение шаблона из ini-файла, в который можно этот путь забивать в любое время, при этом не требуется перекомпиляция программы. 4. Может кто подскажет еще варианты. Не забывайте делать резервные копии |