FoxPro Club цКЮБМЮЪ

йНМТЕПЕМЖХЪ пЕЬЕМХЪ тНРНЮКЭАНЛ яЮИР л.дПНГДНБЮ яРЮРЭХ тЮИКНБШИ ЮПУХБ йМХЦЮ Visual FoxPro 9.0 пСЯЯЙХИ Help ДКЪ Visual FoxPro
оНКЭГНБЮРЕКЕИ: 9445
бУНД
оПХЛЕП ПЮАНРШ Я Word (ХЯОНКЭГНБЮМХЕ OLE)

мЕАНКЭЬНИ ОПХЛЕП ПЮАНРШ Я Word


 
оПХЯКЮК: ю.оХМХЦХМ   йЮРЕЦНПХЪ: Foxpro Х ДПСЦХЕ ОПХКНФЕМХЪ


оПХЛЕП ПЮАНРШ Я Word (ХЯОНКЭГНБЮМХЕ OLE)

oWord = CreateObject("Word.Basic")
oWord = FileOpen ("C:\лНХ ДНЙСЛЕМРШ\Test.doc") && must be exist!
oWord.Insert("КЪ-КЪ")
oWord.InsertPara
oWord.AppShow

бХЙРНП пШАЮЙНБ

рНПЦНБЮЪ тХПЛЮ "мебяйхи", я-оЕРЕПАСПЦ

"Viktor A. Rybakov" <rybak@nevsky.spb.su>

A.оХМХЦХМ, яанпмхй ОПХАЮЛАЮЯНБ ДКЪ VFP ОН ЛЮРЕПХЮКЮЛ ЙНМТЕПЕМЖХИ, КХРЕПЮРСПШ Х ЯНАЯРБЕММШУ ПЮГПЮАНРНЙ. Ц. пХЦЮ E-mail: apinigin@olainfarm.lv
 
яДЕКЮИРЕ НЖЕМЙС ЩРНЦН ПЕЬЕМХЪ оКНУН сДНБКЕРБНПХРЕКЭМН рЮЙ ЯЕАЕ уНПНЬН нРКХВМН рЕЙСЫЮЪ НЖЕМЙЮ: (4.933)
дНОНКМЕМХЪ ОНКЭГНБЮРЕКЕИ
оПХЛЕП ПЮАНРШ Я Word (ХЯОНКЭГНБЮМХЕ OLE)
[+][?]
лХУЮХК яЮБХМ
28.12.01 17:31:47

Задачка создания отчетов, в которых пользователь может вносить изменения для FOXа - это задача...

Я применяю вот что: основой отчета является документ WORD, допустим договор с клиентом. Данные
выбираются в таблицу с одной записью и через стандартный механизм слияния всобачиваются в документ.
Однако в том же документе есть и данные отображаемые в виде таблицы с любым числом строк.
В шаблоне документа имеется заголовок таблицы и одна пустая строка.
Для заполнения такой таблицы нужно открыть документ, переместиться в нужное место и заполнить
таблицу.
Я делаю так:

	dd=ddeinitiate("winword","System")&& устанавливаем связь,если WORD уже запущен dd - хендлер
	
if 	dd<0 &&если нет
	oword=create('word.application')&&Запущаем WORD
	dd=ddeinitiate("winword","System")&&устанавливаем связь 
	else
	dd=ddeinitiate("winword","System")&&устанавливаем связь 
	endif
	if dd<0
	=messagebox('Не удалось MICROSOFT WORD')
	retu
	endif
ELSE
	RETU
ENDIF

	=ddeexecute(dd,'[Fileopen "документ.doc"]')&&открываем документ , в нем  уже будут слиты данные о
клиенте и пр.
	=ddeexecute(dd,'[paradown число параграфов]')&&смещаемся в начало пустой строки в таблице

=ddeexecute(dd,'[TableInsertRow '+'"'+allt(str(кол-во записей))+'"'+"]" )&& ///*добавляем в
таблицу столько строк,сколько нужно,если суммарные итоги не нужны, то на одну меньше ,поскольку
она уже есть*////////

Далее запускается прога,которая выглядит так:
***********************************************************
sele dog3&&выборка для заполнения таблицы в Ворде
все вводимые значения в ddeexecute() должны быть строковыми,поэтому кое-что преобразую по месту 
go top
gggg=1&&счетчик кол-ва строк
DO while !eof()
	SCATT memv
	=ddeexecute(dd,'[Insert "+'"'+allt(str(gggg))+'"'+"]')"&&номер по порядку 
	=ddeexecute(dd,'[NextCell]')&&перешли на след.ячейку таблицы
	=ddeexecute(dd,'[Insert "+'"'+allt(m.pog_dat)+'"'+"]')"&&Дата какая-то и так до конца списка
	=ddeexecute(dd,'[NextCell]')
	=ddeexecute(dd,'[Insert "+'"'+allt(str(m.nominal,13,2))+'"'+"]')"
	=ddeexecute(dd,'[NextCell]')
	=ddeexecute(dd,'[Insert "+'"'+allt(str(m.nominal-m.disc_sum+m.sum_prc,13,2))+'"'+"]')"
	=ddeexecute(dd,'[NextCell]')
	=ddeexecute(dd,'[Insert "+'"'+allt(str(m.disc_veks,13,10))+'"'+"]')"
	=ddeexecute(dd,'[Linedown ]')
	=ddeexecute(dd,'[StartOfRow]')
	Skip
	gggg=gggg+1
ENDDO
****Заполнение строки ИТОГО**********
calc sum(nominal) to sum1
calc sum(nominal-disc_sum+sum_prc) to sum2
=ddeexecute(dd,'[EndOfRow]')
=ddeexecute(dd,'[PrevCell ]')
=ddeexecute(dd,'[PrevCell ]')
=ddeexecute(dd,'[Insert "+'"'+allt(str(sum1,13,2))+'"'+"]')"
=ddeexecute(dd,'[NextCell ]')
=ddeexecute(dd,'[Insert "+'"'+allt(str(sum2,13,2))+'"'+"]')"
*************Конец проги***********************************
Конечно, эту штуку надо бы, причесать, укоротить через перебор полей в цикле и сделать более
универсальной,
но недостаток природной лени не позволяет.

Может кому-то пригодится
[дНОНКМХРЭ]



© 2000-2021 Fox Club 
оПХ ПЮГЛЕЫЕМХХ КЧАШУ ЛЮРЕПХЮКНБ Я ЯЮИРЮ МЮ ДПСЦХУ ПЕЯСПЯЮУ- ОПЪЛЮЪ ЯЯШКЙЮ МЮ www.foxclub.ru НАЪГЮРЕКЭМЮ
ъМДЕЙЯ.лЕРПХЙЮ