Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.12.2008, 19:34
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию Экспорт в Word-2

Уважаемые знатоки! Подскажите как мне сделать экспорт в Word данных, которые пользователь будет вводить в поля Edit, подставлять из полей ComboBox, а также из компонента DateTimePicker. Экспорт должен происходить в шаблон документа Word в поля, которые заключены в шаблоне в [квадратные скобки].
Все исходники и файл шаблона в прикрепленном файле.
Заранее спасибо все ответившим.
Вложения
Тип файла: zip Pack.zip (16.3 Кбайт, 16 просмотров)
Ответить с цитированием
  #2  
Старый 09.12.2008, 20:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Идем в ФАК и читаем про OLE-автоматизацию.
Я рекомендую использовать закладки, т.к. получается быстрее, чем контекстный поиск.
Ответить с цитированием
  #3  
Старый 09.12.2008, 20:43
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

Киньте ссылку, что поиском ничего не находит
Ответить с цитированием
  #4  
Старый 09.12.2008, 21:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Например:
http://www.delphisources.ru/pages/fa...utomation.html
Ответить с цитированием
  #5  
Старый 09.12.2008, 22:29
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

Сложно это пока для меня. Может хоть на примере одной строки из моей программы покажете. Буду очень признателен.
Ответить с цитированием
  #6  
Старый 09.12.2008, 22:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А там все-равно сложно будет. Посмотри там рядом статьи. Может что попроще найдешь. В принципе, там все есть, что тебе надо. Пробуй, потом выкладывай сюда - будем разбираться.
Ответить с цитированием
  #7  
Старый 10.12.2008, 14:45
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Самый простой способ экспорта в 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  
Старый 10.12.2008, 20:32
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

1. По поводу дат: Переделал в 1 метку, получается вот так 01 янв 2008, а как сделать чтобы было 1 января 2008 или 01.01.2008

2. Как сделать чтобы DateTimePicker выдавал по умолчанию текущую дату.

Все остальное получилось, огромное спасибо!!!
Ответить с цитированием
  #9  
Старый 10.12.2008, 20:39
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

1. "01.01.2008" по маске в процедуре DateTimeToString: 'dd.mm.yyyy'. Эта функция склонять месяцы не умеет, так что, например, "января" не получится.
Для этого надо разбивать дату на число, месяц, год и своими методами преобразовывать названия месяцев в родительный падеж. Так что, если очень надо именно так, то разбивка на три метки даты может и пригодится.
На имени функции нажать F1 в справке смотреть какие символы маски допустимы и что обозначают в Date-Time format.

2. Функция Date возвращате текущую дату (системную), Now - дату и текущее время.
__________________
Не забывайте делать резервные копии

Последний раз редактировалось san-46, 10.12.2008 в 20:43.
Ответить с цитированием
  #10  
Старый 10.12.2008, 21:48
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

что то не получается вывести в DateTimePicker текущую дату. В смысле он текущую дает, но если перевести календарь Windows, то остается прежняя дата.
Ответить с цитированием
  #11  
Старый 10.12.2008, 21:55
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Цитата:
Сообщение от Михалыч
...но если перевести календарь Windows, то остается прежняя дата.
Да, остается та дата, которая была присвоена в какой-то момент, допустим, при запуске программы (если, конечно, ее ручками потом не поправляли). А какой в этом криминал?
И зачем переводить календарь Windows? Какой в этом смысл для программы?
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #12  
Старый 10.12.2008, 22:09
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

Запускаю программу, она дает 10.12.2008. Выхожу из программы, перевожу дату на 11.12.2008, запускаю программу, а она все равно дает 10.12.2008, т.е. она типа запоминает старую дату, а надо чтобы всегда текущую выводила.
Ответить с цитированием
  #13  
Старый 10.12.2008, 22:21
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  DateTimePicker1.DateTime := Date;
end;
Если сделать присвоение системной даты при создании приложения как выше показано, то ничего подобного не будет происходить.
А чего у вас там происходит сейчас никто не возьмется предполагать. Мало ли как вы присваиваете дату.
Если в программе нет кода, который сохраняет дату на диске, то никак она сохраниться не может.
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #14  
Старый 12.12.2008, 19:16
Михалыч Михалыч вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 142
Репутация: 15
По умолчанию

А как убрать привязку имени файла doc к конкретному каталогу
в случае если шаблон находится не в каталоге, который прописан в исходном коде?
В данном случае ('<путь до шаблона>\Шаблон.dot')
Ответить с цитированием
  #15  
Старый 12.12.2008, 19:33
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

Решение зависит от требований задачи. Варианты:
1. Разместить шаблон там же где и приложение (исполняемый файл), тогда каталог вместе с именем файла вытаскивается так:
FileName := ExtractFilePath(Application.ExeName)+'шаблон.dot';
2. Выбирать шаблон с помощью диалога выбора файлов (OpenDialog).
3. Читать расположение шаблона из ini-файла, в который можно этот путь забивать в любое время, при этом не требуется перекомпиляция программы.
4. Может кто подскажет еще варианты.
__________________
Не забывайте делать резервные копии
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:41.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025