powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Open Office writer-
3 сообщений из 3, страница 1 из 1
Open Office writer-
    #35947065
alm2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть шаблон документа
В нем есть "Поля ввода" - их я научился заполнять программно из Visual Fox

Но теперь нужно вставить в виде таблицы фрагмент, который сформирован в dbf- файле

Количество записей в DBF заранее не известно


Например,

шифр цена
5.21.2 100
7.18.1 213.23
7.18.2.2 345.12

Посоветуйте как ?
...
Рейтинг: 0 / 0
Open Office writer-
    #35947178
scelo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
CLOSE TABLES
SET DEFAULT TO d:\PEREKAZ\
SET DECIMALS TO 2

DELETE FILE d:\PEREKAZ\em_reestr_ded.DBF
DELETE FILE d:\PEREKAZ\per1.dbf
DELETE FILE d:\PEREKAZ\per2.dbf
**DELETE FILE d:\eias_iz\2009\post\test.dbf


DELETE FILE d:\PEREKAZ\PEREKAZ.txt

SET DECIMALS TO 2

IMPORT FROM d:\employment\source\entersystem\em_reestr_ded.xls TYPE XL8 SHEET "Sheet2"
*BROWSE
COPY TO d:\PEREKAZ\PEREKAZ.txt TYPE SDF FIELDS A, B, C, D, E, F, G
CREATE TABLE d:\PEREKAZ\per1;
(pc_pib C(60), pib C(54), addr C(174), symma N(6,2), dues N(5,2), dues_pdv N(8,2), vsego N(17,2), sbor N(12,2))
APPEND FROM d:\PEREKAZ\PEREKAZ.txt TYPE SDF
********
*BROWSE
*RETURN
USE
USE d:\PEREKAZ\per1
SCAN
replace sbor WITH dues + dues_pdv
ENDscan
*BROWSE
*RETURN

CREATE TABLE d:\PEREKAZ\per2;
(pp N (3), addr C (174) , pib C (30), symma N (10,2), sbor N (12,2) , per C (6))
APPEND FROM per1

*BROWSE
*RETURN

USE
USE d:\PEREKAZ\per2

GO TOP
DELETE NEXT 1
PACK
replace all pp with recno()
**BROWSE

SUM symma TO s1
SUM sbor TO s2
*? s1
*? s2
*BROW
*RETURN
*RETURN
*** WORD ** WORD ** WORD ** WORD ** WORD ** WORD ** WORD ** WORD ** WORD *
* WORD ** WORD ** WORD ** WORD ** WORD ** WORD ** WORD ** WORD ** WORD ************************************ WORD *************************** 2 **** !!!

CLOSE TABLES

SET DEFAULT TO d:\eias_iz\2009\post\
*Создаем новый документ MS WORD на базе ранее созданного шаблона
LOCAL loWord as Word.Application
loWord = CREATEOBJECT('Word.Application')

* Делаем созданный экземпляр приложения Word видимым
* В реальном проекте эта команда дается в самом конце,
* но здесь выносим ее в начало для отладки
m.loWord.Visible = .T.

* Создаем новый документ MS WORD на базе ранее созданного шаблона
LOCAL loDoc as Word.Document
**loDoc = m.loWord.Documents.Add(fullpath('sh1.dot'))
loDoc = m.loWord.Documents.Add(fullpath('shablon23.doc'))

**shablon1.doc

* Формируем ссылку на таблицу документа Word
* В данном случае нужная таблица - это физически самая первая таблица
* в коллекции таблиц, расположенной непосредственно на листе документа
LOCAL loTable as Word.Table
loTable = m.loDoc.Tables(1)

* Для заполнения таблицы Word создадим таблицу в FoxPro
**CREATE Cursor Test (TestId I, TestName C(10))
**CREATE Cursor Test (TestId I, TestName C(10))
**CREATE Cursor Test ;
**(pp N (3), addr C (174) , pib C (30), symma N (10,2), sbor N (12,2) , per C (6))

****NSERT INTO dbf_name [(fname1 [, fname2, ...])]
****VALUES (eExpression1 [, eExpression2, ...])
**USE Customer && Open customer table
**SCATTER MEMVAR
**COPY STRUCTURE TO cust2
**INSERT INTO cust2 FROM MEMVAR

USE d:\PEREKAZ\per2 && Open customer table
**SCATTER MEMVAR
COPY TO ARRAY abba
COPY STRUCTURE TO test
INSERT INTO test FROM ARRAY abba
*INSERT INTO test FROM MEMVAR
COPY TO test866 AS 866
*BROWSE
*RETURN

**INSERT INTO per2
**INSERT INTO Test (TestId, TestName) VALUES (2, "Вторая")
**INSERT INTO Test (TestId, TestName) VALUES (3, "Третья")
**INSERT INTO Test (TestId, TestName) VALUES (4, "Четвертая")
**INSERT INTO Test (TestId, TestName) VALUES (5, "Пятая")
**INSERT INTO Test (TestId, TestName) VALUES (6, "Пятая")
**USE d:\eias_iz\2009\post\per2

* Теперь собственно заполнение
* Счетчик, показывающий, какую строку таблицы Word сейчас заполняем
LOCAL lnWordRowNum
* Первая строка таблицы Word - это заголовок, поэтому начальное значение равно 2
lnWordRowNum = 3
select Test
**select per2
SCAN
* Сначала сравниваю общее количество строк в таблице со значением счетчика
IF m.loTable.Rows.Count < m.lnWordRowNum
* Если количество строк меньше, то создаю новую строку
m.loTable.Rows.Add()
ENDIF
*my

* И собственно заполнение
m.loTable.Cell(m.lnWordRowNum,1).Range.Text = Test.Pp
m.loTable.Cell(m.lnWordRowNum,2).Range.Text = Test.addr
m.loTable.Cell(m.lnWordRowNum,3).Range.Text = Test.pib
m.loTable.Cell(m.lnWordRowNum,4).Range.Text = Test.symma
m.loTable.Cell(m.lnWordRowNum,5).Range.Text = Test.sbor
m.loTable.Cell(m.lnWordRowNum,6).Range.Text = Test.per


**pib C (30), symma N (10,2), sbor N (12,2) , per C (6))
** m.loTable.Cell(m.lnWordRowNum,17).Range.Text = per2.pp
** m.loTable.Cell(m.lnWordRowNum,2).Range.Text = Test.TestName



* Увеличиваю значение счетчика заполняемой строки Word
lnWordRowNum = m.lnWordRowNum + 1
ENDSCAN


**RETURN

*===================================================================



*2 copy

*Создаем новый документ MS WORD на базе ранее созданного шаблона
**LOCAL loWord as Word.Application
**loWord = CREATEOBJECT('Word.Application')

* Делаем созданный экземпляр приложения Word видимым
* В реальном проекте эта команда дается в самом конце,
* но здесь выносим ее в начало для отладки
**m.loWord.Visible = .T.

* Создаем новый документ MS WORD на базе ранее созданного шаблона
**LOCAL loDoc as Word.Document
**loDoc = m.loWord.Documents.Add(fullpath('TestWord.dot'))

* Формируем ссылку на таблицу документа Word
* В данном случае нужная таблица - это физически самая первая таблица
* в коллекции таблиц, расположенной непосредственно на листе документа
LOCAL loTable as Word.Table

loTable = m.loDoc.Tables(2) && 2 tables !!!!!!

* Для заполнения таблицы Word создадим таблицу в FoxPro
CREATE Cursor Test (TestId I, TestName C(10))
INSERT INTO Test (TestId, TestName) VALUES (1, STR(s1))
INSERT INTO Test (TestId, TestName) VALUES (2, STR(s2))
INSERT INTO Test (TestId, TestName) VALUES (3, STR(s1-s2))
INSERT INTO Test (TestId, TestName) VALUES (4, STR(s1+s2))

*INSERT INTO Test (TestId, TestName) VALUES (5, "Пятая")

* Теперь собственно заполнение
* Счетчик, показывающий, какую строку таблицы Word сейчас заполняем
LOCAL lnWordRowNum
* Первая строка таблицы Word - это заголовок, поэтому начальное значение равно 2
lnWordRowNum = 1
select Test
SCAN
* Сначала сравниваю общее количество строк в таблице со значением счетчика
IF m.loTable.Rows.Count < m.lnWordRowNum
* Если количество строк меньше, то создаю новую строку
m.loTable.Rows.Add()
ENDIF

* И собственно заполнение
*m.loTable.Cell(m.lnWordRowNum,1).Range.Text = Test.TestId
m.loTable.Cell(m.lnWordRowNum,2).Range.Text = Test.TestName

* Увеличиваю значение счетчика заполняемой строки Word
lnWordRowNum = m.lnWordRowNum + 1
ENDSCAN
...
Рейтинг: 0 / 0
Open Office writer-
    #35947492
alm2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предыдущий Пример неудачный - нет комментариев, к тому же он Для Word

Но и за это спасибо.


Жду пример от разработчиков, которые сами это уже сделали, с минимальными комментариями.

Нужно в OpenOffice документе созданным Writer,

вставить програмно таблицу и заполнять ее значениями из dbf - файла
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Open Office writer-
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]