Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Работа с таблицами в Word / 20 сообщений из 20, страница 1 из 1
11.07.2012, 11:31
    #37874514
Aleks_Aleks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
...
Рейтинг: 0 / 0
11.07.2012, 12:21
    #37874628
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Aleks_Aleks,
loWord.TypeText("так пишется текст") && переменные, поля здесь никто не отменял
loWord.ActiveDocument.Tables.Add(.Range,1,2) && создание таблицы 1х2
...
Рейтинг: 0 / 0
11.07.2012, 12:24
    #37874641
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Aleks_Aleks,
Код: plsql
1.
2.
loTable=.ActiveDocument.Tables(1)
.Selection.MoveDown(wdCell)   && переход нижней ячейке/на новую строку

Это только кусочек из кода, допили...
...
Рейтинг: 0 / 0
11.07.2012, 12:55
    #37874715
Aleks_Aleks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Jonny540,

Не допилю))), я спал всего один час и плохо соображаю, если не затруднит для моего случая:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
	loWordTab = loWord.ActiveDocument.Tables.Add(loWord.Selection.Range,3,2)
	WITH loWord.Selection.Tables(1)
		.Columns(1).Width = 200
		.Columns(2).Width = 200
		.rows(1).Height = 20
		.rows(2).Height = 20
		.rows(3).Height = 20
		.Style = "Сетка таблицы"
		.Cell(1,1).Range.Text = "R1C1"
		.Cell(1,1).VerticalAlignment = wdCellAlignVerticalCenter
		.Cell(1,2).Range.Text = "R1C2"
		.Cell(1,2).VerticalAlignment = wdCellAlignVerticalCenter
		.Cell(2,1).Range.Text = "R2C1"
		.Cell(2,1).VerticalAlignment = wdCellAlignVerticalCenter 
		.Cell(2,2).Range.Text = "R2C2"
		.Cell(2,2).VerticalAlignment = wdCellAlignVerticalCenter 
		.Cell(3,1).Range.Text = "R3C1"
		.Cell(3,1).VerticalAlignment = wdCellAlignVerticalCenter 
		.Cell(3,2).Range.Text = "R3C2"
		.Cell(3,2).VerticalAlignment = wdCellAlignVerticalCenter
	ENDWITH 
...
Рейтинг: 0 / 0
11.07.2012, 13:01
    #37874737
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Виноват, вот так надо:
Код: plsql
1.
.Selection.MoveDown(wdLIne,2)   && на новую строку, если в предпоследней строке таблицы
...
Рейтинг: 0 / 0
11.07.2012, 13:28
    #37874807
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Aleks_Aleks,
Извини, но тебе лучше всего поспать минут 600...
...
Рейтинг: 0 / 0
11.07.2012, 13:41
    #37874840
Aleks_Aleks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Jonny540,

Спс, но может лучше для моего случая, а то ни как. То не правильное имя то Selection не является объектом. плиз!!!
...
Рейтинг: 0 / 0
11.07.2012, 14:00
    #37874882
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Aleks_Aleks,

ну дык опиши конкретно, что надо.. из примера можно только понять, ты ворд с екселем перемешал
...
Рейтинг: 0 / 0
11.07.2012, 14:24
    #37874940
Aleks_Aleks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Jonny540,

В целом мне нужна таблица. Таблица будет заполняться через SCAN?
Но при заполнении через SCAN нельзя присвоить шапку таблице (т.к. она будет повторяться) и заполнять поля.
Я пришел к выводу что сделаю две таблицы, с начала таблицу «шапку», потом перейду на следующую строку и создам новую таблицу которая будет заполняться через SCAN.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
loWordTab = loWord.ActiveDocument.Tables.Add(loWord.Selection.Range,1,3)
	WITH loWord.Selection.Tables(1)
		.Columns(1).Width = 200
		.Columns(2).Width = 200
		.rows(1).Height = 20
		.rows(2).Height = 20
		.rows(3).Height = 20
		.Style = "Сетка таблицы"
		.Cell(1,1).Range.Text = "№ п/п"
		.Cell(1,1).VerticalAlignment = wdCellAlignVerticalCenter
		.Cell(1,2).Range.Text = "Количество"
		.Cell(1,2).VerticalAlignment = wdCellAlignVerticalCenter	
		.Cell(1,3).Range.Text = "Сумма"
		.Cell(1,3).VerticalAlignment = wdCellAlignVerticalCenter		
	ENDWITH 

*loWord.Tables(1).Selection.MoveDown(wdLIne,2)   && переход на следующую строку 

SELECT Kard
SCAN
loWordTab = loWord.ActiveDocument.Tables.Add(loWord.Selection.Range,1,3)
	WITH loWord.Selection.Tables(1)
		.Columns(1).Width = 200
		.Columns(2).Width = 200
		.rows(1).Height = 20
		.rows(2).Height = 20
		.rows(3).Height = 20
		.Style = "Сетка таблицы"
		.Cell(1,1).Range.Text = Kard.numb
		.Cell(1,1).VerticalAlignment = wdCellAlignVerticalCenter
		.Cell(1,2).Range.Text = Kard.kol
		.Cell(1,2).VerticalAlignment = wdCellAlignVerticalCenter			
		 .Cell(1,3).Range.Text = Kard.Sum
		.Cell(1,3).VerticalAlignment = wdCellAlignVerticalCenter		
	ENDWITH 
ENDSCAN
...
Рейтинг: 0 / 0
11.07.2012, 16:39
    #37875240
gore-egor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Aleks_Aleks,

Извини, фигня. Шапку тебе никто не мешает делать сразу после создания файла.
Ну а дальше - SCAN , заполнение ячеек таблицы ворда в цикле....
В чем проблема-то?
Я тоже не спал, вообще, и чё???
И что такое R1C1?
...
Рейтинг: 0 / 0
11.07.2012, 18:09
    #37875413
Aleks_Aleks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Aleks_Aleks,

Спасибо Jonny540! Только надо было подтолкнуть меня, а то я сонный не допилил.
Вот так у меня будет правильно:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
	loWordTab = loWord.ActiveDocument.Tables.Add(loWord.Selection.Range,1,3)
	WITH loWord.Selection.Tables(1)
		.Columns(1).Width = 200
		.Columns(2).Width = 200
		.Columns(3).Width = 200
		.rows(1).Height = 20
		.Style = "Сетка таблицы"
		.Cell(1,1).Range.Text = "№ п/п"
		.Cell(1,1).VerticalAlignment = wdCellAlignVerticalCenter 
		.Cell(1,2).Range.Text = "Количество"
		.Cell(1,2).VerticalAlignment = wdCellAlignVerticalCenter
		.Cell(1,3).Range.Text = "Сумма"
		.Cell(1,3).VerticalAlignment = wdCellAlignVerticalCenter 
	ENDWITH 

           *Вот он переход!!!
           WITH loWord.Selection 
	           .MoveDown(wdLine,1)
           ENDWITH
...
Рейтинг: 0 / 0
11.07.2012, 19:20
    #37875502
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Aleks_Aleks,авторWITH loWord.Selection
.MoveDown(wdLine,1)
ENDWITH
Код: plsql
1.
loWord.MoveDown(wdLine,1)

Можно и так. Good luck!
...
Рейтинг: 0 / 0
12.07.2012, 17:22
    #37877037
Aleks_Aleks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Jonny540,

Пол дела сделали)))
Вот такой еще вопрос , когда в Word вставляешь таблицу и если она очень большая та она разбивается на два листа. И получается что строка попадает в разрыв страниц, и часть содержимого абзаца на одном листе а другая часть на втором.
А как сделать чтобы, если не влезает на лист, то та часть что не влезает переносилась на новый лист целиком? И плюс, с начала шапка о потом продолжение таблицы!
...
Рейтинг: 0 / 0
12.07.2012, 19:55
    #37877258
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Aleks_Aleks,

Проблема вечная...
Считай строки. Не знаю, может в ворде есть что-нибудь типа _PLENGTH, _PLINENO?
На форуме такая проблема с отчетами FoxPro обсуждалась, поищи, может, поможет.
И на FoxClub что-то я видел на эту тему...
А если после вывода руками допилить документ?
...
Рейтинг: 0 / 0
17.07.2012, 09:47
    #37881699
Aleks_Aleks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Jonny540,

Нет!, проблема не вечная, вот ответ:
В word есть встроенные функции:
- Разрешить перенос строк на следующую страницу
- Повторять как заголовок на каждой странице
( они лежат: свойство таблицы - строка ).
Параметр: «Разрешить перенос строк на следующую страницу» - если снять галочку то строки таблиц не будут разрываться на два листа.
Параметр: «Повторять как заголовок на каждой странице» - если поставить галочку то заголовок таблицы будет повторяться на каждом листе.
Код для FoxPro:
Код: sql
1.
2.
3.
4.
5.
*Разрешить перенос строк на следующую страницу
loWord.Selection.Tables(1).Rows.AllowBreakAcrossPages = .F.
*Повторять как заголовок на каждой странице
#DEFINE wdToggle                  9999998
loWord.Selection.Tables(1).Rows(1).HeadingFormat = wdToggle
...
Рейтинг: 0 / 0
17.07.2012, 10:10
    #37881724
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Aleks_Aleks,

Спасибо! Когда-то пытался найти, но... А как быть с подчеркиванием при переходе
на новую страницу?
...
Рейтинг: 0 / 0
17.07.2012, 10:27
    #37881756
Aleks_Aleks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
В приведенном коде описано все как построить отчет, который на картинке!

* WdParagraphAlignment
#DEFINE wdAlignParagraphLeft 0
#DEFINE wdAlignParagraphCenter 1
#DEFINE wdAlignParagraphRight 2
#DEFINE wdAlignParagraphJustify 3
* WdCellVerticalAlignment
#DEFINE wdCellAlignVerticalTop 0
#DEFINE wdCellAlignVerticalCenter 1
#DEFINE wdCellAlignVerticalBottom 3
* Orientation
#DEFINE wdOrientLandscape 1
#DEFINE cr CHR(13)
* Строка
#DEFINE wdLine 5
#DEFINE wdCell 12
* Линия подчеркивания
#DEFINE wdUnderlineSingle 1
* Повторяющиеся заголовки
#DEFINE wdToggle 9999998
* Разрыв страницы
#DEFINE wdPageBreak 7
*Selection.InsertBreak Type:=wdPageBreak
* WdPageNumberAlignment
#DEFINE wdAlignPageNumberLeft 0
#DEFINE wdAlignPageNumberCenter 1
#DEFINE wdAlignPageNumberRight 2
#DEFINE wdAlignPageNumberInside 3
#DEFINE wdAlignPageNumberOutside 4

SET OLEOBJECT ON
LOCAL lcColZap, nRow, lcPn, lcperz

*-------------- WORD ---------------------------
LOCAL loWord, loWordDoc, loWordTab
loWord = CREATEOBJECT('Word.Application')
loWord.visible = .F.
loWordDoc=loWord.Documents.Add
loWordDoc.PageSetup.Orientation = wdOrientLandscape
loWordDoc.PageSetup.TopMargin = 40
loWordDoc.PageSetup.BottomMargin = 40
loWordDoc.PageSetup.LeftMargin = 40
loWordDoc.PageSetup.RightMargin = 40
*Пред настройки таблицы
loWord.Selection.Font.Size = 12
loWord.Selection.Font.Name = "Times New Roman"
loWord.Selection.Font.Bold = .F.
loWord.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft && задается до таблицы
*Таблица документа
loWordTab = loWord.ActiveDocument.Tables.Add(loWord.Selection.Range,1,2)
WITH loWord.Selection.Tables(1)
.Columns(1).Width = 560
.Columns(2).Width = 225
.rows(1).Height = 40
* .Style = "Сетка таблицы"
.Cell(1,1).Range.Text = "СОГЛАСОВАНО"
.Cell(1,1).VerticalAlignment = wdCellAlignVerticalCenter && внутри таблицы
.Cell(1,2).Range.Text = "УТВЕРЖДАЮ"
.Cell(1,2).VerticalAlignment = wdCellAlignVerticalCenter
ENDWITH
WITH loWord.Selection
.MoveDown(wdLine,1)
ENDWITH
*Текст документа
WITH loWord.Selection
.Font.Size =12
.Font.Name = "Times New Roman"
.ParagraphFormat.Alignment = wdAlignParagraphCenter
.TypeText("ПРОТОКОЛ №")
.TypeText(+CHR(10)+CHR(13))
.ParagraphFormat.Alignment = wdAlignParagraphLeft
.TypeText("Присутствовали:")
.TypeText(+CHR(13))
.Font.Underline = wdUnderlineSingle
.TypeText("Рассмотрены вопросы и решения:")
* .Font.Underline = .T.
.TypeText(+CHR(13))
.Font.Underline = .F.
.TypeText("Таблица №")
.TypeParagraph
ENDWITH

loWord.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
SELECT DocName, DocDate, DocTitle, RegNumb, PointNumb, PointSod, D_n, Naimp ;
FROM Otpz INTO CURSOR OtpzWord ORDER BY Otpz.RegNumb
SELECT COUNT(OtpzWord.RegNumb) as colzap FROM OtpzWord INTO CURSOR OtpzWordCol
lcColZap = OtpzWordCol.colzap
*Пред настройки таблицы
loWord.Selection.Font.Size = 12
loWord.Selection.Font.Name = "Times New Roman"
loWord.Selection.Font.Bold = .F.
* loWord.Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft && задается до таблицы

*Таблица документа
loWordTab = loWord.ActiveDocument.Tables.Add(loWord.Selection.Range,lcColZap+1,4)

SELECT OtpzWord
lcperz = 1
nRow = 0
SCAN
lcPn = RECNO()
nRow = nRow + 1
IF lcperz = 1
WITH loWord.Selection.Tables(1)
.Columns(1).Width = 51
.Columns(2).Width = 245
.Columns(3).Width = 245
.Columns(4).Width = 245
* .rows(1).Height = 20
.Style = "Сетка таблицы" && рисует границы таблицы
.Cell(1,1).Range.Text = "№ п/п"
.Cell(1,1).VerticalAlignment = wdCellAlignVerticalCenter && внутри таблицы
.Rows(1).AllowBreakAcrossPages = .F.
.Cell(1,2).Range.Text = "Документ, по которому имеется невыполнение"
.Cell(1,2).VerticalAlignment = wdCellAlignVerticalCenter
.Rows(1).AllowBreakAcrossPages = .F.
.Cell(1,3).Range.Text = "Пункты и его содержание, ответственный и исполнитель, срок исполнения"
.Cell(1,3).VerticalAlignment = wdCellAlignVerticalCenter
.Rows(1).AllowBreakAcrossPages = .F.
.Cell(1,4).Range.Text = "Принятое решение (или № с/з на перенос)"
.Cell(1,4).VerticalAlignment = wdCellAlignVerticalCenter
.Rows(1).AllowBreakAcrossPages = .F.
* .Rows(1).HeadingFormat = wdToggle && здесь эта функц. не работает
ENDWITH
nRow = nRow + 1
lcperz = 0
ENDIF
WITH loWord.Selection.Tables(1)
.Columns(1).Width = 51
.Columns(2).Width = 245
.Columns(3).Width = 245
.Columns(4).Width = 245
.Style = "Сетка таблицы"
.Cell(nRow,1).Range.Text = lcPn
.Cell(nRow,1).VerticalAlignment = wdCellAlignVerticalTop
.Cell(nRow,2).Range.Text = ALLTRIM(OtpzWord.DocName)+' от '+LEFT(TTOC(OtpzWord.DocDate),8)+' '+ALLTRIM(OtpzWord.DocTitle)+' ('+ALLTRIM(OtpzWord.RegNumb)+')'
.Cell(nRow,2).VerticalAlignment = wdCellAlignVerticalTop
.Cell(nRow,3).Range.Text = 'п. '+ALLTRIM(OtpzWord.PointNumb)+' - '+ALLTRIM(OtpzWord.PointSod)+' Отв.: '+ALLTRIM(OtpzWord.Naimp)+' Срок: '+LEFT(TTOC(OtpzWord.D_n),8)
.Cell(nRow,3).VerticalAlignment = wdCellAlignVerticalTop
.Cell(nRow,4).Range.Text = " "
.Cell(nRow,4).VerticalAlignment = wdCellAlignVerticalTop
.Rows.AllowBreakAcrossPages = .F.
.Rows(1).HeadingFormat = wdToggle
ENDWITH
ENDSCAN
loWord.Selection.Sections(1).Footers(1).PageNumbers.Add(wdAlignPageNumberRight, .T.) && нумерация страниц
loWord.visible = .T.
...
Рейтинг: 0 / 0
17.07.2012, 12:46
    #37882036
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Aleks_Aleks,
почему обязательно отчетом, а не програмное формирование ДОС(в формате НТМ)
для печати вордом
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
SET ALTE TO c:\MK1.DOC
       SET ALTE ON
       TEXT
       <HTML>
       <meta http-equiv=Content-Type content="text/html; charset=CP866">
       <BODY>
       ENDTEXT
       USE KLIENT
       ?'<TABLE BORDER=1 WIDTH=100% CELLSPACING=0 CELLPADDIND=0>'
       ?'<THEAD>'
       ?'<TR>'
       ?'<TH>ПЛАТЕЛЬЩИК'
       ?'<TH>АДРЕС'
       ?'<TH>АДРЕС'
       ?'<TH>АДРЕС'
       
       ?'<TH>КОЛИЧЕСТВО'
       ?'</THEAD>'
       
       DO WHILE .NOT.EOF()
        J=0
        
        DO WHILE J<7    &&ЦИКЛ ДЛЯ КОЛИЧЕСТВА
        J=J+1
        ?'<TR>'
        ?'<TD>',NKLIENT
        ?'<TD>',ADR1,ADR2
        ?'<TD>',ADR1,ADR2
        ?'<TD>',ADR1,ADR2
       
        ?'<TD ALIGN=RIGHT>',SUBS(INN2,4,1)
        LOOP
       SKIP
       ENDDO
       ?'</TABLE>'
       ?'<P>','-'+CHR(12)
       ?'<TABLE BORDER=1 WIDTH=100% CELLSPACING=0 CELLPADDIND=0>'
       
       GO TOP
       DO WHILE .NOT.EOF()
       J2=VAL(SUBS(INN2,4,1))+1
       J1=0
       *WAIT
       DO WHILE J1<J2
       J1=J1+1
       IF J1>0
       ?'<TR HEIGHT=450>'
       ?'<TD><FONT SIZE=5>',TRIM(NKLIENT)
       ?'<BR><FONT SIZE=3>',REPL('-',30)
       ?'<BR><FONT SIZE=7>КУДА:',TRIM(ADR1)
       ?'<BR><FONT SIZE=5>____:',TRIM(ADR2)
       
       *WAIT
       ENDIF
       ENDDO
       SKIP
       ENDDO
       ?'</TABLE>'
       SET ALTE OFF
       SET ALTE TO
       QUIT
...
Рейтинг: 0 / 0
17.07.2012, 13:52
    #37882188
Aleks_Aleks
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
ПЕНСИОНЕРКАAleks_Aleks,
почему обязательно отчетом, а не програмное формирование ДОС(в формате НТМ)
для печати вордом
отчетом - Это документ word!

програмное формирование - loWord = CREATEOBJECT('Word.Application') && Какое это формирование если не програмное!?

для печати - Не только для печати, а для: редактирования, сохранения, передачи и т.д.!

НТМ - Есть {FoxPro--Word} здесь нет места HTM!

Не знаю что ты имел в виду, но HTM я знаю плохо, да и зачем эти трудности, по-моему и так все хорошо.
...
Рейтинг: 0 / 0
17.07.2012, 15:14
    #37882368
Jonny540
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с таблицами в Word
Aleks_Aleks,
спасибо! надо было мне прошерстить файл заголовка :)
высылаю, может, пригодится: вместо большинства #DEFINE один #INCLUDE
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Работа с таблицами в Word / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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