|
Open Office writer-
|
|||
---|---|---|---|
#18+
Есть шаблон документа В нем есть "Поля ввода" - их я научился заполнять программно из Visual Fox Но теперь нужно вставить в виде таблицы фрагмент, который сформирован в dbf- файле Количество записей в DBF заранее не известно Например, шифр цена 5.21.2 100 7.18.1 213.23 7.18.2.2 345.12 Посоветуйте как ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2009, 14:20 |
|
Open Office writer-
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2009, 14:47 |
|
Open Office writer-
|
|||
---|---|---|---|
#18+
Предыдущий Пример неудачный - нет комментариев, к тому же он Для Word Но и за это спасибо. Жду пример от разработчиков, которые сами это уже сделали, с минимальными комментариями. Нужно в OpenOffice документе созданным Writer, вставить програмно таблицу и заполнять ее значениями из dbf - файла ... |
|||
:
Нравится:
Не нравится:
|
|||
22.04.2009, 15:59 |
|
|
start [/forum/topic.php?fid=41&msg=35947178&tid=1586541]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 331ms |
total: | 455ms |
0 / 0 |