:: Visual Foxpro, Foxpro for DOS
OpenOffice.Calc + VFP
Eg

Сообщений: 10
Дата регистрации: 13.09.2007
Доброго времени суток.
Помогите пожалуйста. Нужно использовать ДатуПечати, количество Листов и порядковый НомерВыводимогоЛиста.
При Выводе из VPF в OpenOffice.Calc. Оговорка: ДатаПечати <> ДатеФормированияОтчета.
Эти переменные существуют в OpenOffice.Calc видно из свойств документа, но ни Имени, ни Об'екта которому принадлежат не нашел.
С уважением Eg.
Ratings: 0 negative/0 positive
Re: OpenOffice.Calc + VFP
rvc44
Автор

Сообщений: 2211
Откуда: Тамбов
Дата регистрации: 06.12.2005
При выводе из VPF в OpenOffice.org Calc количество листов и порядковый номер выводимого
листа можно получить следующим образом. В приведенном ниже примере этими (и не только)
данными заполняются колонтитулы подготавливаемых для печати страниц Calc.
После выполнения кода см. предварительный просмотр листа:
oPageStyles = oDoc.StyleFamilies.getByName("PageStyles") && oDoc.getStyleFamilies().getByName( "PageStyles" )
oPageSetup = oPageStyles.getByName(oSheet.PageStyle) && или oPageStyles.getByName("Default"), т.е. Стиль страницы: Базовый
*-- СОЗДАДИМ ЭКЗЕМПЛЯР ОБЪЕКТОВ "ТЕКУЩИЙ НОМЕР СТРАНИЦЫ" И "ОБЩЕЕ КОЛИЧЕСТВО СТРАНИЦ"
oPageNumber = oDoc.createInstance( "com.sun.star.text.TextField.PageNumber" )
oPageCount = oDoc.createInstance( "com.sun.star.text.TextField.PageCount" )
*-- СОЗДАДИМ ЭКЗЕМПЛЯР ОБЪЕКТОВ "ДАТА" И "ВРЕМЯ" СОЗДАНИЯ ДОКУМЕНТА
oDate = oDoc.createInstance( "com.sun.star.text.TextField.Date" )
oTime = oDoc.createInstance( "com.sun.star.text.TextField.Time" )
*-- СОЗДАДИМ ЭКЗЕМПЛЯР ОБЪЕКТА "ИМЯ ФАЙЛА" БЕЗ ПУТЕЙ ДОСТУПА
oFileName = oDoc.createInstance( "com.sun.star.text.TextField.FileName" )
With oPageSetup
.ScaleToPagesX = 1 && Аналог .FitToPagesWide в Excel
.ScaleToPagesY = 1000 && Аналог .FitToPagesTall в Excel
.IsLandscape = .T. && Ориентация страницы
.Height = 21000 && Для изменения ориентации листа таким способом,
.Width = 29700 && необходимо дополнительно выставлять его размеры!
.HeaderOn = .T. && Включаем верхний колонтитул
.FooterOn = .T. && Включаем нижний колонтитул
.FooterShared = .T. && Делаем нижний колонтитул shared (на все страницы)
*-- Установим текст верхнего колонтитула
oHeader = .RightPageHeaderContent
oHeader.getLeftText().setString( "Подготовлено с использованием OpenOffice.org")
oHeader.getCenterText().setString( "" )
oHeader.getRightText().setString( "Страница " )
oCursor = oHeader.getRightText().createTextCursor()
oCursor.gotoEnd( .F. )
oHeader.getRightText().insertTextContent( oCursor, oPageNumber, .T. )
oCursor.gotoEnd( .F. )
oCursor.setString( " из " )
oCursor.gotoEnd( .F. )
oHeader.getRightText().insertTextContent( oCursor, oPageCount, .T. )
.RightPageHeaderContent = oHeader
*-- Установим текст нижнего колонтитула
oFooter = .RightPageFooterContent
oFooter.getLeftText().setString( "Документ: " )
oCursor = oFooter.getLeftText().createTextCursor()
oCursor.gotoEnd( .F. )
oFooter.getLeftText().insertTextContent( oCursor, oFileName, .T. )
oFooter.getCenterText().setString( "" )
oFooter.getRightText().setString( "Сформировано " ) && +TTOC(DATETIME())
oCursor = oFooter.getRightText().createTextCursor()
oCursor.gotoEnd( .F. )
oFooter.getRightText().insertTextContent( oCursor, oDate, .T. )
oCursor.gotoEnd( .F. )
oCursor.setString( Space(3) )
oCursor.gotoEnd( .F. )
oFooter.getRightText().insertTextContent( oCursor, oTime, .T. )
.RightPageFooterContent = oFooter
*-- Установим поля страницы
.LeftMargin = 1500 && Аналог команды: oPage.setPropertyValue("LeftMargin", 500)
.TopMargin = 1500 && 1500 означает 1,5 см
.RightMargin = 1500
.BottomMargin = 1500
EndWith

См. также документацию по модулю TextField, включая полный список его сервисов:
api.openoffice.org
Проше не путать модуль TextField с сервисом TextField (который здесь к делу не относится):
api.openoffice.org

Далее можно пройти по ссылкам сервисов модуля TextField.
Так, например, сервис PageCount модуля TextField описан здесь:
api.openoffice.org

Еще модуль TextField наследует модуль DocInfo со всем его списком сервисов:
api.openoffice.org.

Доступ к дате печати документа осуществляется через
oDoc.DocumentInfo.PrintDate
oDoc.DocumentInfo.PrintDate.Year
oDoc.DocumentInfo.PrintDate.Month
oDoc.DocumentInfo.PrintDate.Day
но только, если документ был ранее распечатан!.
В противном случае доступ к данному объекту может только породить ошибку.
Я бы не рекомендовал этим пользоваться, предложив взамен этого использовать
текущую дату и время. Т.к. при использовании объекта DocumentInfo были какие-то глюки,
которые должны были исправить еще в январе. Не знаю сейчас их уже исправили или нет?
Но если уж очень хочется, то смотрите подробнее здесь: www.oooforum.org



Исправлено 3 раз(а). Последнее : rvc44, 13.09.07 14:32
Ratings: 0 negative/0 positive
Re: OpenOffice.Calc + VFP
Eg

Сообщений: 10
Дата регистрации: 13.09.2007
Большое спасибо.
Cлегка подправил:
oFooter = .RightPageFooterContent
oFooter.getLeftText().setString( "Изменен ")
oFooter.getCenterText().setString( "" )
oCursor = oFooter.getLeftText().createTextCursor()
oCursor.gotoEnd( .F. )
oFooter.getLeftText().insertTextContent( oCursor, oDate, .T. )
oCursor.gotoEnd( .F. )
oCursor.setString( Space(3) )
oCursor.gotoEnd( .F. )
oFooter.getLeftText().insertTextContent( oCursor, oTime, .T. )
.RightPageFooterContent = oFooter
*!* отслеживает изменения в документе
oText = oFooter.CenterText
oText.setString("") && Убираем значение по умолчанию нижнего колонтитула по центру
.RightPageFooterContent = oFooter

oText = oFooter.RightText
oText.setString([Дата формирования ]+DTOC(DATE())+[ ]+TIME())
*!* Когда сформирован документ.
С уважением Eg.
P.S. Извините, под Листом понимался печатный лист, получаемый разбиением Листа (Sheet) при печати.



Исправлено 1 раз(а). Последнее : Eg, 13.09.07 16:29
Ratings: 0 negative/0 positive
Re: OpenOffice.Calc + VFP
Eg

Сообщений: 10
Дата регистрации: 13.09.2007
Доброго времени суток.
Уважаемым rvc44 было предложено решение через Стили документа. Но в этом случае нужно создать несколько стилей т.к. создается некоторое множество Sheets.
И желательно эти стили сохранить, для последующей работы.
К сожалению, Speadsheet Docments примеры приведены для Java.
А еще есть стили ячеек, тоже очень вкусная вещь.
Помогите, люди добрые!
Ratings: 0 negative/0 positive
Re: OpenOffice.Calc + VFP
rvc44
Автор

Сообщений: 2211
Откуда: Тамбов
Дата регистрации: 06.12.2005
2Eg:
Совсем непонятен вопрос и кажется он не в тему?
В чем, собственно, помочь?

About Subj (теперь по теме):
С удивлением обнаружил, что приводимый мой выше фрагмент кода
oDate = oDoc.createInstance( "com.sun.star.text.TextField.Date" )
oTime = oDoc.createInstance( "com.sun.star.text.TextField.Time" )
похоже добавляет совсем не дату и время создания документа!
Сохранив такой файл и открыв его через пару дней, можно увидеть,
что в этих полях в колонтитуле красуется текущие дата и время,
а никак не дата и время создания файла! Кто-нибудь еще проверял?
Приношу свои извинения. Накладочка вышла-с!
Ratings: 0 negative/0 positive
Re: OpenOffice.Calc + VFP
Eg

Сообщений: 10
Дата регистрации: 13.09.2007
Доброго времени суток.
1.Вопрос в тему, т.к. создается несколько листов по числу подразделений организации, содержание которых может изменнено вручную, + каждый лист при печати должен быть первым Листом с количеством страниц принадлежащих только ему, + если применять одинаковые Стили к разным листам увеличевается счетчик страниц: Header содержит ложную информацию. То есть следует присвоить каждому листу свой Стиль.
И т.к. это одна организация созданные стили можно применить к другим документам. Требуется сохранение, и чтение Стилей.
2.Приведенный мной кусок кода соответсвует поставленной задаче. Спасибо Вам.
Ratings: 0 negative/0 positive
Re: OpenOffice.Calc + VFP
Eg

Сообщений: 10
Дата регистрации: 13.09.2007
Доброго времени суток.
Извините накладка
Цитата:
2.Приведенный мной кусок кода соответсвует поставленной задаче
Читать: приведенный кусок кода позволяет получить Время изменения и создания документа.
Нашел на SQL.ru как добавить новый стиль.
oPageStyle = loDoc.createinstance("com.sun.star.style.PageStyle") && Конкретный Стиль
oPageStyles.insertByName ("St1", oPageStyle) && Добавить название Стиля
oPageSetup=oPageStyles.getByName("St1")
Помогло Header стал отображать правильное число страниц в документе, но это не совсем то ...
В модуле textfild на api.openoffice.org есть
ReferencePageGet specifies service of a text field that displays the page number with respect to a reference point. The reference point is determined by a ReferencePageSet text field.
ReferencePageSet specifies service of a text field that inserts additional page numbers.
Помогите использовать.
И все-таки стиль нужно сохранить, и прочитать.
Ratings: 0 negative/0 positive
Re: OpenOffice.Calc + VFP
rvc44
Автор

Сообщений: 2211
Откуда: Тамбов
Дата регистрации: 06.12.2005
Я вчера здесь, на сайте, целое готовое решение опубликовал,
где, в часности, показано как добавлять и работать со стилями:
www.foxclub.ru
Ratings: 0 negative/0 positive
Re: OpenOffice.Calc + VFP
rvc44
Автор

Сообщений: 2211
Откуда: Тамбов
Дата регистрации: 06.12.2005
А по поводу готовых примеров, то лучшие места для их поиска:
отечественное:
community.i-rs.ru
буржуйское:
www.oooforum.org
Ratings: 0 negative/0 positive


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

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

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