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

Это только кусочек из кода, допили...
...
Рейтинг: 0 / 0
Работа с таблицами в Word
    #37874715
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Работа с таблицами в Word
    #37874737
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виноват, вот так надо:
Код: plsql
1.
.Selection.MoveDown(wdLIne,2)   && на новую строку, если в предпоследней строке таблицы
...
Рейтинг: 0 / 0
Работа с таблицами в Word
    #37874807
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_Aleks,
Извини, но тебе лучше всего поспать минут 600...
...
Рейтинг: 0 / 0
Работа с таблицами в Word
    #37874840
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Jonny540,

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

ну дык опиши конкретно, что надо.. из примера можно только понять, ты ворд с екселем перемешал
...
Рейтинг: 0 / 0
Работа с таблицами в Word
    #37874940
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Работа с таблицами в Word
    #37875240
gore-egor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleks_Aleks,

Извини, фигня. Шапку тебе никто не мешает делать сразу после создания файла.
Ну а дальше - SCAN , заполнение ячеек таблицы ворда в цикле....
В чем проблема-то?
Я тоже не спал, вообще, и чё???
И что такое R1C1?
...
Рейтинг: 0 / 0
Работа с таблицами в Word
    #37875413
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Работа с таблицами в Word
    #37875502
Jonny540
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleks_Aleks,авторWITH loWord.Selection
.MoveDown(wdLine,1)
ENDWITH
Код: plsql
1.
loWord.MoveDown(wdLine,1)

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

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

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

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

* 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
Работа с таблицами в Word
    #37882036
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работа с таблицами в Word
    #37882188
Aleks_Aleks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКАAleks_Aleks,
почему обязательно отчетом, а не програмное формирование ДОС(в формате НТМ)
для печати вордом
отчетом - Это документ word!

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

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

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

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


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