:: Visual Foxpro, Foxpro for DOS
создание отчёта OpenCalc из VFP (фильтр и центрирование данных на листе при печати)
Leffurt
Автор

Сообщений: 33
Дата регистрации: 15.06.2015
Требуется создать отчёт из VFP в OpenCalc.
Не могу найти аналоги Excel команд для OpenOffice.
Есть ссылки на сайты community.i-rs.ru и oooforum.org , но похоже, что сайты не работают.
Почти всё получается,осталось две проблемы:
Как настроить печать отчёта по середине по горизонтали (в Excel: oExcel.Sheets[1].PageSetup.CenterHorizontally=.T.)
Как установить фильтр (в Excel, например, на 7 строку: oExcel.Range("A7:G7").AutoFilter)
К сожалению, макросы в OpenOffice не дают результата в нужном формате...
Ratings: 0 negative/0 positive
Re: создание отчёта OpenCalc из VFP (фильтр и центрирование данных на листе при печати)
ABB

Сообщений: 149
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
Посмотрите praisachion.blogspot.com
Ratings: 0 negative/0 positive
Re: создание отчёта OpenCalc из VFP (фильтр и центрирование данных на листе при печати)
Leffurt
Автор

Сообщений: 33
Дата регистрации: 15.06.2015
Спасибо, но не помогло. Там только о конвертации данных, а мне нужно о настройке стиля печати.
Ratings: 0 negative/0 positive
Re: создание отчёта OpenCalc из VFP (фильтр и центрирование данных на листе при печати)
Bront

Сообщений: 15
Откуда: Барнаул
Дата регистрации: 08.06.2007
смотри тут rvc44 дал подробный рабочий пример, с ответами на Ваши вопросы. Он первопроходец по ОО на этом форуме
Спасибо ему большое.

forum.foxclub.ru

а тут есть ссылки на книгу Питоньяка, на класс по выгрузке в ОО
forum.foxclub.ru
Ratings: 0 negative/0 positive
Re: создание отчёта OpenCalc из VFP (фильтр и центрирование данных на листе при печати)
Bront

Сообщений: 15
Откуда: Барнаул
Дата регистрации: 08.06.2007
забыл про автофильтр, выдернул из функции

LOCAL i, lcAlias, lcField, loDoc, loSheet, loBorderLine, loPageStyles, loPageSetup, ;
loFooter, loText, loLocale, loFormats, loShell, sFileName, cURL
LOCAL ARRAY laArgs[2]

* Откроем OO Calc с "пустым" документом
cURL = "private:factory/scalc"
loDesktop = OOoGetDesktop()
laArgs[1] = OOoPropertyValue( "Hidden", .T.)
laArgs[2] = OOoPropertyValue( "ReadOnly", .F. )
loDoc = loDesktop.LoadComponentFromUrl( cURL, "_blank", 0, @ laArgs )
* Make sure that arrays passed to this document are passed zero based.
COMARRAY( loDoc, 10 )

* Прячем окно Calc'а чтобы пользователь не видел процесс заполнения
loDoc.GetCurrentController.GetFrame.GetContainerWindow.SetVisible(.F.)
* Выбираем первый лист
loSheet = loDoc.getSheets().getByIndex( 0 )

loLocale = OOoCreateStruct( "com.sun.star.lang.Locale" )
With loLocale
.Language = "ru"
.Country = "RU"
EndWith
loFormats = loDoc.getNumberFormats()

If NOT loDoc.DatabaseRanges.hasByName("MyName") && проверка на наличие диапазона, так как его нет то определяю его
*** определяю последнюю строку и столбец на листе
LOCAL aAddress, lcRow_out, lcCol_out, lcrange, oRangeOrg, oCell, oCursor
*/* aAddress - возвращаемый обьект,содержит
*/* aAddress.EndRow - последняя строка
*/* aAddress.EndColumn - последняя колонка
oCell = loSheet.getCellByPosition(0, 0)
oCursor = loSheet.createCursorByRange(oCell)
oCursor.GotoEndOfUsedArea(.T.)
aAddress = oCursor.RangeAddress

lcRow_out=aAddress.EndRow
lcCol_out=aAddress.EndColumn
*** создается текстовый диапазон
lcrange="A10:C10"
*** Этот диапазон объектом
oRangeOrg = loSheet.getCellRangeByName(lcrange).RangeAddress
*** даем ему название
This.loDocument.DatabaseRanges.addNewByName("MyName", oRangeOrg )
ENDIF
oRange = loDoc.DatabaseRanges.getByName("MyName")
oRange.AutoFilter = .T. && применяю автофильтр

* Запишем файл *.xls в папку Out
sFileName = pcZapusk + [Out\] + cTitle + [.xls]
cURL = "file:///" + CHRTRAN( sFileName, "\", "/" ) && OOoConvertToURL( sFileName )
laArgs[1] = OOoPropertyValue("Overwrite", .T.)
laArgs[2] = OOoPropertyValue("FilterName", "MS Excel 97")
loDoc.storeAsURL(cURL, @laArgs)

* Делаем сформированный отчет видимым
loDoc.getCurrentController.getFrame.getContainerWindow.SetVisible(.T.)

* Работа со скриптами отсутствует на Windows 98!
TRY
loShell = CreateObject("WScript.Shell")
loShell.AppActivate(cTitle) && Спасибо Вадиму Пирожкову aka piva!
loShell.SendKeys("") && См. forum.foxclub.ru
CATCH
ENDTRY
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика