Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi, Word] Как передать в Word переменные?


Автор: Сарт 14.9.2006, 20:36
Народ, возникла проблема. Хотя она достаточно стандарнтая, но в Дельфине я почти ламер=)

Итак, в чем нужно помочь:
1)передача в Word--как сделать?(пример плиз=))
2)Передать в Word стринговые и интовые переменные, но не абы как,а в виде

Переменная а

Переменная б
Переменная с
Интовая переменная


Переменная д

То есть покажите плиз, как передать в столбик с  строковыми промежутками и без

3) Передать те же переменные не просто в Word, но с созданием текста\(или вставкой).
Например, есть у меня заготовка вордовская типа

Я,______, заключаю контракт с ______.

Хотелось бы понять , как сделать чтобы переменные в ворде становились таким образом

Я,__переменная а, содержащая ФИО____ заключаю контракт с ____переменная,содержащая название организации____ на сумму____интовая переменная____.

И еще вопрос--если идет сумма на миллиарды, хватит ли типа integer??

Спасибо за внимание=-)).Надеюсб на вас, винградовцы=)

Автор: ДенисБелов 14.9.2006, 21:47
Вывод инфы в Word довольно простая вещь. 
Вот пример для твоей задачи. 


Код

Procedure InWord(a,b:Integer; c:String); {Твои переменные}
 Var WordApp,WordDoc:Variant; {переменные испльзуемые для связи с сервером}

Begin
 Try
   WordApp:=CreateOleObject('Word.Application'); {Создание сервера}
   WordApp.Visible:=False; {Окно скроем, чтобы не мешало экспорту}

   WordDoc:=WordApp.Documents.Add; {Создадим новый док на основе шаблона по умолч}

   {Далее выводишь с помощю объекта Selection отображающего текущее выделение, например}

   WordApp.Selection.ParagraphFormat.Alignment:=1; {Выравнивание текущего параграфа (0..3)}
   WordApp.Selection.Font.Bold:=True; {Атрибут жирный}
   WordApp.Selection.Font.Size:=20; {Размер шрифта}
   WordApp.Selection.Font.Color:=clBlue; {Цвет}
   WordApp.Selection.TypeText('Я заключаю контракт с'); {Вывод текста}
  WordApp.Selection.TypeText(с);
  WordApp.Selection.TypeParagraph; {перевод строки}
  WordApp.Selection.TypeText(IntToStr(a)); {Вывод твоей переменной}
  WordApp.Selection.TypeText(с);
 {.......   и.т.п. как в консоль выводишь}

finally 
If not VarIsEmpty(WordApp) Then WordApp.Visible:=True; {Если все нормуль то показываем окно Worda}
WordApp:=Undisigned; {Разрушаем все обекты}
WordDoc:=Undisigned;
End;



Цитата

Я,__переменная а, содержащая ФИО____ заключаю контракт с ____переменная,содержащая название организации____ на сумму____интовая переменная____.

И еще вопрос--если идет сумма на миллиарды, хватит ли типа integer??


Ни фига себе контракты.... smile 


Тип        Промежуток
Integer    –2147483648..2147483647    
Cardinal   0..4294967295    
Shortint    –128..127    
Smallint    –32768..32767    
Longint    –2147483648..2147483647    
Int64     –2^63..2^63–1    
Byte     0..255    
Word     0..65535    
Longword     0..4294967295    







Автор: Сарт 14.9.2006, 23:27
Ну контракты в беларуских рублях, так что миллиард это всего навсего 455 тыс баксов=). Поверь,для банка это средний контракт=).
И сразу вопрос---как инфу сохранить в MS Access + реализовать по ней поиск(по фамилии и точной сумме кредита?=))

Автор: Сарт 15.9.2006, 00:32
Да,забыл сказать. Именно в Аксесс --не обязательно. Главное требование-прога должна работать без требований к компу кроме винды и оффиса.
Возмоожно даже нету у нас Аксесса, завтра гляну. Так что мона и др варианты=)
Например, таскание с прогой файлика не является проблемой, а вот через SQL--уже проблема,ибо она,насколько знаю, без сервака не пашет=)

Автор: ДенисБелов 15.9.2006, 08:39
Мда, сдался тебе этот Access.  Если даннных не так много, то можно хранить хоть в текстовом файле. Это в случае пары тысяч записей, иначе конечно лучше использовать БД, благо в delphi поддержка их нормальная. Но это двумя словами не расскажешь.
Для текстового файла код можно примерно такой.

Код

Procedure VstavkaVKonec(a,b,c:String{Данные});
Var f:TextFile; {Перменная -файл}
 Begin
  AssignFile(f,'c:\Data.txt');{Связываем файл с переменной}
  Append(f); {Открываем для записи в конец}
  WriteLn(f,a); {Записываем в файл, что хотели}
  WriteLn(f,'Text'); {}
  Write(f,b); Write(f,c); {}
  Close(f); {и закрываем}
 End; 


Соответственно при поиске открываем файл для чтения 
 Reset(f);
 
Считываем данные
 ReadLn(f,a);
 Read(f,a);
 сравниваем с параметром поиска, если удовлетворяет, то выводим.

Автор: comtat 15.9.2006, 08:54
http://forum.vingrad.ru/index.php?showtopic=84634&view=all

Автор: dazy 15.9.2006, 15:53
Если вы делаете софт для автоматизации договоров, то лучше передавать в Ворд только изменяемые данные, а постоянные хранить в шаблоне.
Лучше всего для этой цели использовать закладки в Ворде. Таким образом у вас будет шаблон, с текстом договора, а в местах куда надо подставить данные будут стоять закладки. Программа на основе шаблона делает новый документ,  пробегает по закладкам подсовывает данные и  сохраняет/печатает - контракт готов. Как все это реализовать, тут на форуме где-то было  подробно написано. Рекомендую использовать именно шаблону, так как если необходимо внести изменения в договор (например у вас управляющий поменялся, поле _в_лице..._) то не надо лезть в код, пользователь сам изменит шаблон и не будет (скорее всего) отвлекать вас для внесения изменений в программу.
Сохранение  и поиск в базе данных это другой вопрос. Сначала выберите базу в которой будете хранить данные, затем все остальное. Но это тоже не сложно.
Клиент может работать даже если Access не установлен на компьютере. 


Автор: Сарт 15.9.2006, 21:13
Текстовик не подходит, СЛИШКОМ много записей накопиться уже за 5 месяцев работы=)

Насчет закладок в Ворде-если мона поподробнее

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)