Форум » GUI » Нужно сохранить отчет в формате .DOC для Microsoft Word . КАК? » Ответить

Нужно сохранить отчет в формате .DOC для Microsoft Word . КАК?

Softlog86: Пока предполагаю по аналогии с .XLS созданием методом OLE . У меня отчет - бланк Наряд-заказа с СТО с реквизитами сторон , тремя таблицами и итогами .... Для красоты несколько линий для разделения тематики .

Ответов - 31, стр: 1 2 All

Andrey: Softlog86 пишет: Пока предполагаю по аналогии Ну и ??? Дальше предположений дело ушло ??? Открыт уже документ или еще не открыт документ, внесены реквизиты в документ или нужно ещё только внести, да и сохранять по разному можно.... Поищи здесь на форуме, я давно в хХарборе выкладывал рабочий пример создания/записи doc-файла. С помощью наших ГУРУ мне удалось тогда сделать рабочую версию программы. У себя поискал, не нашёл. Ищи здесь на форуме.

Dima: поиск на форуме Word.Application

Softlog86: Уточнение : Документ готовится для печати через MiniPrint - функции . Хочется добавить Экспорт(сохранение) этого документа в .DOC для дальнейшей обработки средствами MicrosoftWord уже другими людьми на других компах . Пока не могу понять как работать с таблицами ( заполнять данные , располагать на листе ) , рисование линий , и т д . Был-бы признателен за какой-нибудь пример


Dima: Softlog86 Почему бы сразу все не формировать через MS WORD ?

Andrey: Softlog86 пишет: Уточнение : Документ готовится для печати через MiniPrint - функции . Хочется добавить Экспорт(сохранение) этого документа в .DOC для дальнейшей обработки средствами MicrosoftWord Это кто же сделает тебе программу экспорта из MiniPrint в DOC файл ? По моему doc-файл закрытый формат и его право имеют использовать только Microsoft, т.е. создавать файлы такого формата. Читать могут все. Но может я и ошибаюсь.

Softlog86: Андрей , ты не понял . Нужна помощь именно в моментах вроде 'как нарисовать линию' и 'как вставить (создать) таблицу внутри документа' . Затем сохранение готового листа в файл ..... Разумеется всё это посредством вызова OLE MSWord .

Dima: Softlog86 пишет: Нужна помощь именно в моментах вроде 'как нарисовать линию' и 'как вставить (создать) таблицу внутри документа' . Это нужно сделать в miniprint или в OLE MSWord ?

Andrey: Давай по шагам (сам страдаю косноязычием, не всегда могу объяснить чего я хочу). 1) Имеется готовый уже файл doc ? 2) Открываем его и рисуем линию, таблицу и т.д. ? Так ?

Dima: Andrey пишет: Давай по шагам (сам страдаю косноязычием, не всегда могу объяснить чего я хочу). Жесть , он же писал что в Miniprint все делает. Читал ? :)

Andrey: Dima пишет: Жесть , он же писал что в Miniprint все делает. Читал ? :) Softlog86 пишет: Андрей , ты не понял . Нужна помощь именно в моментах вроде 'как нарисовать линию' и 'как вставить (создать) таблицу внутри документа' . Затем сохранение готового листа в файл ..... Разумеется всё это посредством вызова OLE MSWord . ?

Softlog86: Сейчас форма выводится вот такими командами : -------------------------------------------------------- SELECT PRINTER mPrinter ORIENTATION PRINTER_ORIENT_PORTRAIT PREVIEW START PRINTDOC NAME "ZAKAZ-NARYAD" START PRINTPAGE @ 15 , 80 PRINT 'ЗАКАЗ-НАРЯД № '+MyORDER FONT 'ARIAL' SIZE 15 BOLD @ 25 , 20 PRINT 'Заказчик:' FONT 'ARIAL' SIZE 8 @ 30 , 20 PRINT 'Адрес:' FONT 'ARIAL' SIZE 8 .......................................................................... // Рамка-заголовок @ 45 , 10 PRINT RECTANGLE TO 52, 200 PENWIDTH 0.2 COLOR YELLOW FILLED ROUNDED @ 46 , 20 PRINT 'Марка' @ 46 , 50 PRINT 'Модель' ....................................................................... // Вывод содержимого таблицы ВЫПОЛНЕННЫЕ РАБОТЫ For i:=1 to N @ Start , 10 PRINT RECTANGLE TO Start+Pripusk, 200 PENWIDTH 0.2 COLOR BLACK // Рамка @ Start+Dta,10+2 PRINT ALSTR(i) FONT 'ARIAL' SIZE 8 // No @ Start+Dta,20 PRINT LEFT(UPPER(ADATA1[i,1]),50) FONT 'ARIAL' SIZE 8 // Наименование работ/услуг @ Start+Dta,145 PRINT ADATA1[i,2] FONT 'ARIAL' SIZE 8 // Норматив времени Start:=Start+Pripusk //Припуск в ММ NEXT i // Вертикальные линии (столбцы ) @ sBegin , 18 PRINT LINE TO Start,18 PENWIDTH 0.2 COLOR BLACK @ sBegin ,130 PRINT LINE TO Start,130 PENWIDTH 0.2 COLOR BLACK ................................................................................................................. Start:=Start+3 @ Start ,115 PRINT 'Всего по заказ-наряду: '+ALSTR(Itogo_WORK+Itogo_GOODS)+'.р' FONT 'ARIAL' SIZE 10 END PRINTPAGE END PRINTDOC ------------------------------------------------------------------------------------------------------------------------------ Задача - сделать такой-же отчет , только в .DOC . Видимо придётся писать что-то подобное для вывода через OLE : 1) Запускаем WORD если он не был открыт до этого 2) Создаём пустой лист 3) Заполняем информацией 4) Сохраняем в .DOC 5) Закрываем WORD (если открыт этой программой) Трудности в незнании некоторых команд внутри самого WORD : Как вставлять (рисовать?) таблицы . Рисование рамок , линий и т д . Думал найти готовый пример ....

Dima: Softlog86 пишет: Трудности в незнании некоторых команд внутри самого WORD Поюзай макросы в самом Word и посмотри что он использует на нужных тебе операциях.

petr707: Варианты: 1) использование шаблонов отчетов в том же формате, что и отчет (XLS ,DOC, RTF ..). Для каждого отчета -свой файл шаблона. В шаблоне - тэги для замены на реальные значения при формировании отчета. Пример развития - FastReport 2)Стандартизуете вывод с miniprint не в конечный отчет,а в полуфабрикат(метаязык), который потом универсальным (своим же) модулем будете перегонять в DOC, XLS,RTF... Пример - формат PDF или XPS 3)Сразу создать PDF-файл, библы есть. Кстати, сразу можно решить проблему защиты готового документа от корректировки недобросовестным юзером. Просмотр и печать отчетов можно либо AdobeReader или Sumatra, оба Freeware 4) Вывод через OLE как правило требует для подготовки отчета наличие компонента, то есть возникает требование, что на компе юзера MS Word должен быть, а это уже принудительны затраты юзера. Можно было бы использовать OpenOffice, но иногда юзер не хочет иметь лишние компоненты на своем компе. 5)...ну и т.д.

Softlog86: Метод с шаблонами наиболее удобен . Помогите разобраться в части тэгов и работы с ними . Лучше на примере :)

petr707: Поищу примеры, еще на Клиппере видел у кого-то. Но все достаточно просто. Создаете файл нужного формата, в определеном месте документа размещаете тэг, скажем #Title При создании отчета вместо #Title вставляете значение своей программной переменной Title Тэги типа таблицы $Table - посложнее, но все равно нетрудно.

Andrey: Softlog86 пишет: 1) Запускаем WORD если он не был открыт до этого 2) Создаём пустой лист 3) Заполняем информацией xHarbour\tests\testole.prg и далее Dima пишет: поиск на форуме Word.Application http://clipper.borda.ru/?1-4-0-00000218-000-0-0-1346058933 и др.

ZAlex: Во времена, когда все писалось на Clipper, а появились лазерные принтеры и отчеты пользователи захотели видеть красивыми, очень помогла утилитка RepoRTF(генератор отчетов в Word'овском формате RTF, а также в форматах txt и html). До этого все отчеты генерились в собственном генераторе отчетов, потребовались минимальные переделки программ, чтобы все генерировалось через переходник. Довольно сложные отчеты с несколькими уровнями детализации получалось делать. О утилитке можно более подробно почитать на http://www.vsi.ru/~apl (взято из документации). Утилитка бесплатная, шла с исходными кодами на C и Pascal. При желании наверное можно было бы переписать, чтобы прилинковывать к Harbour программам, но знаний не хватает. На ПК пользователя должен присутствовать Word. В архиве поставки есть множество примеров-шаблонов.

Andrey: У себя еще на Клипере сделал и до сих пор пользуюсь отчетами в RTF. Считываю внешний файл dogov_dom.info (как ини), считываю rtf-файл указанный в .info как строку, делаю влоб замену строк в файле (типа '`01' на 'ALLTRIM(STR(FIELD->Ndog))' ), далее сохраняю эту строку во временную папку как rtf-файл и открываю этот файл через WORD (открывать можно и через Open Office). С 2000 года работает. Правда нужно аккуратно делать разметку в rtf. Вот пример dogov_dom.info: [Настройка] Имя_формы = "Договор-приватизации на дом" Файл_шаблона = "dogov_dom.rtf" Отладка = .F. [Поля] Поле_1 = { '`01' , 'ALLTRIM(STR(FIELD->Ndog))' } Поле_2 = { '`02' , 'SAY_DATA(FIELD->DateDog)' } Поле_3 = { '`03' , 'MEMOLINE(PRIV_FIO(9),77,1)' } Поле_4 = { '`04' , 'MEMOLINE(PRIV_FIO(9),77,2)' } .... Поле_8 = { '`05' , 'PRIV_ADRES(2)' } Поле_10 = { '`07' , 'DTOC(FIELD->DateOrder)' } Поле_15 = { '`73' , 'TRANSFORM(FIELD->DateInv,"99.99.9999")' } А в тексте RTF выглядит так:

Dima: Andrey пишет: и открываю этот файл через WORD (открывать можно и через Open Office). А можно и средствами Wordpad , он входит в OS

Vlad04: А можно и средствами Wordpad Он таблицы не поддерживает

Softlog86: Экспериментирую с выводом формы в MS Word ...... 1) Есть-ли возможность 'прямого' вывода строки в определенную позицию на листе , например через координаты .... в EXCELL с этим удобнее - указываем номер ячейки X,Y и всё ,,,,, 2) Так и не понял как организовать таблицу в указанном месте листа .... Вообще не понял как из макроса сделать команды в Harbour

Andrey: Softlog86 пишет: Вообще не понял как из макроса сделать команды в Harbour Смотри -> Dima пишет: поиск на форуме Word.Application

Dima: Softlog86 Есть простой способ , руками пробнул работает. Опишу чуть позже.

Dima: Открываем документ EXCEL и всю наборку делаем в нем включая таблицы и тд и тп. Выделяем нужный кусок документа и копируем в буфер. Делаем вставку в чистом документе WORD. Все. ЗЫ Юзал таблицу , раскрасил её , внес данные , все сработало.

SadStar3333: Есть-ли возможность 'прямого' вывода строки в определенную позицию на листе Я использовал Bookmarks т.е. давал заданным кускам текста подходящие имена а потом так [pre2] ... aAdd(aBookMarks, {"Team", s}) aAdd(aBookMarks, {"Sign3", wMain.txt_Manager3.Value}) aAdd(aBookMarks, {"Sign4", wMain.txt_Manager4.Value}) aAdd(aBookMarks, {"Sign2", wMain.txt_Manager2.Value}) If oResDoc:Bookmarks:Count > 0 BkMrk:="" For Each BkMrk In oResDoc:Bookmarks bmName:=BkMrk:Name if (n:=AScan( aBookMarks, {|x| x[ 1 ] == bmName} ))>0 //BkMrk:Range := BkMrk:Name BkMrk:Range := aBookMarks[n,2] endif Next //BkMrk EndIf oWord:Visible := .T. oWord:WindowState := 1 // Maximizado [/pre2]

azoo: Подскажите пожалуйста, как в данном примере сделать так чтобы "Время" и "Дата" были с разными параметрами шрифта ? IF ( oWord := win_oleCreateObject( "Word.Application" ) ) != NIL oWord:Documents:Add() oText := oWord:Selection() oText:Text := "" oText:Font:Name := "Courier New" oText:Font:Size := 8 oText:Font:Bold := .f. oText:Text += hb_oemtoansi("Время") + hb_eol() oText:Font:Name := "Courier New" oText:Font:Size := 12 oText:Font:Bold := .t. oText:Text += hb_oemtoansi("Дата") + hb_eol() oWord:Visible := .T. oWord:WindowState := 1 /* Maximize */ ELSE ? "Error. MS Word not available.", win_oleErrorText() ENDIF

Dima: А что не пашет как в примере ? azoo пишет: hb_oemtoansi( Что то мне кажется что hb_oemtoansi уже и не нужен если свежий Harbour

azoo: Dima, не важно, просто исходник набран в 866 кодировке. Можно и так: oText:Text += "Дата" + hb_eol() Вопрос в том, что в Wordе текст получается одинаковым, т.е. без учёта параметров Size, Bold

Dima: azoo Даже не знаю, я не работал с "Word.Application" , так как спокойно обходимся без него. Попробуй на форуме поиск дёрнуть по фразе Word.Application , может примеры найдешь какие или загугли на предмет Word.Application + Harbour

Dima: azoo пишет: oText:Font:Name := "Courier New" oText:Font:Size := 8 oText:Font:Bold := .f. oText:Text += hb_oemtoansi("Время") + hb_eol() а если так oText:Text += hb_oemtoansi("Время") + hb_eol() oText:Font:Name := "Courier New" oText:Font:Size := 8 oText:Font:Bold := .f.

Andrey: По просьбе желающих выложил готовые примеры у Григория на сайте - http://hmgextended.com/applications.html Преобразование DBF в DOC через объект ОЛЕ в МиниГуи / Convert DBF to DOC via the OLE object in MiniGui Преобразование DBF в XLS через объект ОЛЕ в МиниГуи / Convert DBF to XLS via the OLE object in MiniGui Примеры для МиниГуи, но можно использовать и для терминалки.



полная версия страницы