![]() |
|
|
#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. Может кто подскажет еще варианты. |