24.09.13 — 09:26
День добрый, подскажите как добавить строки в макет Word?
Делаю так:
Табл = Word.Tables.Item(3);
Для каждого СтрокаСотрудник Из СсылкаНаОбъект.РаботникиОрганизации Цикл
Табл.Rows.add();
Табл.Cell(СтрокаСотрудник.НомерСтроки,1).Select();
Word.ActiveWindow.ActivePane.Selection.TypeText(строка(СтрокаСотрудник.Сотрудник));
Табл.Cell(СтрокаСотрудник.НомерСтроки,2).Select();
Word.ActiveWindow.ActivePane.Selection.TypeText(Строка(СтрокаСотрудник.Сотрудник.Код));
КонецЦикла;
Ругается на строке Табл.Cell(): «запрашиваемый номер семейства не существует».
1 — 24.09.13 — 10:17
подскажите что делаю не так? Плиззз
2 — 24.09.13 — 11:43
пробовала так делать, таже ошибка:
Word.Tables(1).Cell(СчетчикЦикла + 2,1).Range.Text = Счет.НомерСтроки;
3 — 24.09.13 — 11:46
Код для 7.7
Счет.ВыбратьСтроки();
// заполнение таблицы номенклатуры
Для СчетчикЦикла = 1 По Счет.КоличествоСтрок() Цикл
мОбъект.Tables(1).Rows.Add(); // добавляем строку в конец таблицы
Счет.ПолучитьСтрокуПоНомеру(СчетчикЦикла);
мОбъект.Tables(1).Cell(СчетчикЦикла + 2,1).Range.Text = Счет.НомерСтроки;
мОбъект.Tables(1).Cell(СчетчикЦикла + 2,2).Range.Text = СокрЛП(Счет.Номенклатура.ПолнНаименование);
мОбъект.Tables(1).Cell(СчетчикЦикла + 2,3).Range.Text = СокрЛП(Формат(Счет.Количество, «Ч010.2»));
мОбъект.Tables(1).Cell(СчетчикЦикла + 2,4).Range.Text = Строка(Счет.Единица);
мОбъект.Tables(1).Cell(СчетчикЦикла + 2,5).Range.Text = глФрм(Счет.Цена);
мОбъект.Tables(1).Cell(СчетчикЦикла + 2,6).Range.Text = глФрм(Счет.СуммаНДС);
мОбъект.Tables(1).Cell(СчетчикЦикла + 2,7).Range.Text = глФрм(Счет.Сумма);
КонецЦикла;
// итоги
мОбъект.Tables(2).Cell(1,2).Range.Text = СокрЛП(Формат(Счет.Итог(«Количество»), «Ч010.2»));
мОбъект.Tables(2).Cell(1,5).Range.Text = глФрм(Счет.Итог(«СуммаНДС»));
мОбъект.Tables(2).Cell(1,6).Range.Text = глФрм(Счет.Итог(«Сумма»));
4 — 24.09.13 — 11:47
не ругается только так:
Word.Tables(3).Cell(1,1).Range.Text = СтрокаСотрудник.Сотрудник;
Word.Tables(3).Cell(1,2).Range.Text = СтрокаСотрудник.Сотрудник.Код;
Может в шапке дело?
5 — 24.09.13 — 11:47
Про мОбъект:
// формируем файл
мWord = СоздатьОбъект(«Word.Application»);
мWord.Visible = 0;
мNewDoc = мWord.Documents;
мШаблон = СокрЛП(Строка(КаталогШаблонов + мШаблон));
мДок = мNewDoc.Add(мШаблон, 0, 0, 1);
// верхний колонтитул
мКолонтитул = мДок.Sections.Item(1).Headers.Item(1).Range;
мКолонтитул.Find.Execute(«[ПечНомерДоговора]»,0,0,,,,,,,мНомерДоговора,2);
мКолонтитул.Find.Execute(«[ПечДатаДоговора]»,0,0,,,,,,,Нрег(СокрЛП(мДатаДоговора)),2);
мОбъект = мДок.Content;
6 — 24.09.13 — 11:48
(4) Дело не в шапке, а в Word.Tables(3) — это и есть таблица.
7 — 24.09.13 — 12:07
не понимаю, толи я такое балбесь, то ли что?
Делаю как у вас:
мWord = Новый COMОбъект(«Word.Application»);
мWord.Visible = 0;
мNewDoc = мWord.Documents;
мШаблон = СокрЛП(Строка(«\СОтпуска.doc»));
мДок = мNewDoc.Add(мШаблон, 0, 0, 1);
мОбъект = мДок.Content;
Для каждого СтрокаСотрудник Из СсылкаНаОбъект.РаботникиОрганизации Цикл
мОбъект.Tables(3).Rows.Add();
мОбъект.Tables(3).Cell(СтрокаСотрудник.НомерСтроки,1).Range.Text = Строка(СтрокаСотрудник.Сотрудник);
мОбъект.Tables(3).Cell(СтрокаСотрудник.НомерСтроки,2).Range.Text = Строка(СтрокаСотрудник.Сотрудник.Код);
КонецЦикла;
Все равно таже ошибка на строке мОбъект.Tables(3).Cell(): «запрашиваемый номер семейства не существует».
8 — 24.09.13 — 12:22
мОбъект.Tables(2) — экземпляр таблицы Word, где (2) — порядковый номер самой таблицы Word. У меня 2 таблицы, поэтому в первом случае — мОбъект.Tables(1), а во втором — мОбъект.Tables(2).
Кроме того, счетчик строк (Cell) — у меня первые 2 строки таблицы — шапка самой таблицы, поэтому
Для СчетчикЦикла = 1 По Счет.КоличествоСтрок() Цикл
мОбъект.Tables(1).Rows.Add(); // добавляем строку в конец таблицы
Счет.ПолучитьСтрокуПоНомеру(СчетчикЦикла);
мОбъект.Tables(1).Cell(СчетчикЦикла + 2,1).Range.Text = Счет.НомерСтроки;
9 — 24.09.13 — 12:29
(8) в том и проблема, что он вообще ругается на Cell(), не принимает ничего, кроме Cell(1, 1)
Даже если пишу руками Cell(2, 1) уже не работает!
10 — 24.09.13 — 13:11
(9) Покажи скриншот таблицы Word.
11 — 24.09.13 — 13:16
(10) типовая форма T-6а (Приказ на отпуск)
12 — 24.09.13 — 13:33
(11) Это «скриншот»? Я просила скриншота таблицы (с макета) Word.
13 — 25.09.13 — 06:43
14 — 25.09.13 — 06:57
(13) открой этот шаблон в ворде , включи запись макроса , сделай что тебе надо , останови запись макроса , посмотри что он туда записал
15 — 25.09.13 — 08:18
(13) Нужно пробовать:
Для каждого СтрокаСотрудник Из СсылкаНаОбъект.РаботникиОрганизации Цикл
мОбъект.Tables(3).Rows.Add();
мОбъект.Tables(3).Cell(СтрокаСотрудник.НомерСтроки + 2,1).Range.Text = Строка(СтрокаСотрудник.Сотрудник);
мОбъект.Tables(3).Cell(СтрокаСотрудник.НомерСтроки + 2,2).Range.Text = Строка(СтрокаСотрудник.Сотрудник.Код);
КонецЦикла;
ИМХО, нужно подбирать. Хотя если умеешь писать макросы (14) — будет быстрее.
16 — 25.09.13 — 08:18
+(15) По идее — у тебя первые 2 строки таблицы — шапка.
17 — 25.09.13 — 09:05
(15) пробовала уже так, не работает
18 — 25.09.13 — 09:33
(17) А вообще, работа с макетом получается (ну, кроме таблицы)?
19 — 25.09.13 — 10:32
(18) Да, получается. И пробовала в другие таблицы в макете вставлять строки, все нормуль, а в которую нужно (третью со сложной шапкой) не хочет и все.
20 — 25.09.13 — 10:55
(19) Как вариант, ниже этой «сложной таблицы» вставь просто строку с нумерацией колонок и попробуй добавить в эту таблицу строки. Если получится — потом просто удалить не нужные строки и слить 2 таблицы.
Судя-по всему — шапка не нравится.
21 — 25.09.13 — 10:55
22 — 25.09.13 — 11:00
(20) вот и думаю дело в шапке, но пошла по другому. Двигаю курсор, табличку конечно заполнила, но вопрос открыт, почему же Cell не срабатывает
Text = Word.Selection;
//позицианируемся на строке таблицы
Text.MoveDown(, 19); // вниз на строки
Text.MoveRight(, 11); //вправо на строки
Position = Text.Range();
Табл = Doc.Tables.Item(3);
Для каждого СтрокаСотрудник Из СсылкаНаОбъект.РаботникиОрганизации Цикл
Text.InsertRows(); //Добавляем строку
Word.ActiveWindow.ActivePane.Selection.TypeText(строка(СтрокаСотрудник.Сотрудник));
Text.MoveRight(, 1); //вправо на строки
Word.ActiveWindow.ActivePane.Selection.TypeText(строка(СтрокаСотрудник.Сотрудник.Код));
КонецЦикла;
23 — 25.09.13 — 11:04
(22) Я бы тупо перебором пробовала:
мОбъект.Tables(3).Cell(СтрокаСотрудник.НомерСтроки + 2,1).Range.Text = Строка(СтрокаСотрудник.Сотрудник);
НомерСтроки + 2 (0,1,2,3,4……)
Не факт, что взлетит, но я бы попробовала
24 — 25.09.13 — 11:05
(23) пробовала, не взлетело
25 — 25.09.13 — 11:06
(23) спасибо за помощь и поддержку!
26 — 25.09.13 — 11:09
А «СтрокаСотрудник.НомерСтроки» — что возвращает и какой тип?
Масянька
27 — 25.09.13 — 11:10
(25) Не за что (и сама такая ).
title | description | titleSuffix | ms.date | ms.topic | dev_langs | helpviewer_keywords | author | ms.author | manager | ms.technology | ms.workload | |||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
How to: Programmatically add rows and columns to Word tables |
Learn how you can use the Add method of the Rows object to add rows to the table. You can also use the Add method of the Columns object to add columns. |
02/02/2017 |
how-to |
|
|
John-Hart |
johnhart |
jmartens |
office-development |
office |
How to: Programmatically add rows and columns to Word tables
[!INCLUDE Visual Studio]
In a Microsoft Office Word table, the cells are organized into rows and columns. You can use the xref:Microsoft.Office.Interop.Word.Rows.Add%2A method of the xref:Microsoft.Office.Interop.Word.Rows object to add rows to the table and the xref:Microsoft.Office.Interop.Word.Columns.Add%2A method of the xref:Microsoft.Office.Interop.Word.Columns object to add columns.
[!INCLUDEappliesto_wdalldocapp]
Document-level customization examples
The following code examples can be used in a document-level customization. To use these examples, run them from the ThisDocument
class in your project. These examples assume that the document associated with your customization already has at least one table.
[!IMPORTANT]
This code runs only in projects that you create by using any of the following project templates:
Word 2013 Document
Word 2013 Template
Word 2010 Document
Word 2010 Template
If you want to perform this task in any other type of project, you must add a reference to the Microsoft.Office.Interop.Word assembly, and then you must use classes from that assembly to add rows and columns to tables. For more information, see How to: Target Office applications through primary interop assemblies and Word 2010 primary interop assembly reference.
To add a row to a table
-
Use the xref:Microsoft.Office.Interop.Word.Rows.Add%2A method to add a row to the table.
C#
:::code language=»csharp» source=»codesnippet/CSharp/Trin_VstcoreWordAutomationCS/ThisDocument.cs» id=»Snippet95″:::
VB
:::code language=»vb» source=»codesnippet/VisualBasic/Trin_VstcoreWordAutomationVB/ThisDocument.vb» id=»Snippet95″:::
To add a column to a table
-
Use the xref:Microsoft.Office.Interop.Word.Columns.Add%2A method, and then use the xref:Microsoft.Office.Interop.Word.Columns.DistributeWidth%2A method to make all the columns the same width.
C#
:::code language=»csharp» source=»codesnippet/CSharp/Trin_VstcoreWordAutomationCS/ThisDocument.cs» id=»Snippet96″:::
VB
:::code language=»vb» source=»codesnippet/VisualBasic/Trin_VstcoreWordAutomationVB/ThisDocument.vb» id=»Snippet96″:::
VSTO Add-in examples
The following code examples can be used in a VSTO Add-in. To use the examples, run them from the ThisAddIn
class in your project. These examples assume that the active document already has at least one table.
[!IMPORTANT]
This code runs only in projects that you create by using Word VSTO Add-in templates.If you want to perform this task in any other type of project, you must add a reference to the Microsoft.Office.Interop.Word assembly, and then you must use classes from that assembly to add rows and columns to tables. For more information, see How to: Target Office applications through primary interop assemblies and Word 2010 primary interop assembly reference.
To add a row to a table
-
Use the xref:Microsoft.Office.Interop.Word.Rows.Add%2A method to add a row to the table.
C#
:::code language=»csharp» source=»codesnippet/CSharp/Trin_VstcoreWordAutomationAddIn/ThisAddIn.cs» id=»Snippet95″:::
VB
:::code language=»vb» source=»codesnippet/VisualBasic/Trin_VstcoreWordAutomationAddIn/ThisAddIn.vb» id=»Snippet95″:::
To add a column to a table
-
Use the xref:Microsoft.Office.Interop.Word.Columns.Add%2A method, and then use the xref:Microsoft.Office.Interop.Word.Columns.DistributeWidth%2A method to make all the columns the same width.
C#
:::code language=»csharp» source=»codesnippet/CSharp/Trin_VstcoreWordAutomationAddIn/ThisAddIn.cs» id=»Snippet96″:::
VB
:::code language=»vb» source=»codesnippet/VisualBasic/Trin_VstcoreWordAutomationAddIn/ThisAddIn.vb» id=»Snippet96″:::
See also
- How to: Programmatically create Word tables
- How to: Programmatically add text and formatting to cells in Word tables
- How to: Programmatically populate Word tables with document properties
3orP 157 / 2 / 3 Регистрация: 27.12.2012 Сообщений: 26 |
||||
1 |
||||
05.07.2013, 12:17. Показов 25319. Ответов 4 Метки нет (Все метки)
Здравствуйте! Прошу помочь мне со следующим: в документе есть 3 таблицы. Во время заполнения 2-ой таблицы из формы нужно сделать так, чтобы при добавлении новой записи создавалась и строчка в которую бы вписывались эти данные Вот код, который я сейчас имею:
0 |
S.V.I.N. 5 / 5 / 1 Регистрация: 06.04.2012 Сообщений: 38 |
||||||||
16.07.2013, 12:21 |
2 |
|||||||
Уважаемый 3orP,
Добавлено через 8 минут
1 |
157 / 2 / 3 Регистрация: 27.12.2012 Сообщений: 26 |
||
16.07.2013, 14:05 [ТС] |
3 |
|
S.V.I.N., спасибо большое! Вложения
0 |
S.V.I.N. 5 / 5 / 1 Регистрация: 06.04.2012 Сообщений: 38 |
||||
16.07.2013, 14:40 |
4 |
|||
Т.к. строки нужно вставлять перед последней строкой, то для этого нужно посчитать общее кол-во строк в таблице. Затем из полученного числа вычитаем единичку, т.е. мы получим индекс предпоследней строки таблицы. Далее выделяем предпоследнюю строку и вставляем новую строчку в таблицу…
1 |
157 / 2 / 3 Регистрация: 27.12.2012 Сообщений: 26 |
|
16.07.2013, 15:02 [ТС] |
5 |
S.V.I.N., огромное спасибо!
0 |
Функция Прим() Ворд = Новый COMОбъект("Word.Application"); Док = Ворд.Documents.Open(ИмяФайла); Табл=Док.Tables(1); Итого = 0; Сч = 1; для Каждого стрСчет из СсылкаНаОбъект.Товары Цикл сч=сч+1; ТекстВ_Ячейку(сч,1,стрСчет.номерстроки); ТекстВ_Ячейку(сч,2,стрСчет.Номенклатура.НаименованиеПолное); ТекстВ_Ячейку(сч,3,стрСчет.Количество); ТекстВ_Ячейку(сч,4,стрСчет.Цена); ТекстВ_Ячейку(сч,5,стрСчет.Сумма); Если сч-1 <> СсылкаНаОбъект.Товары.Количество() Тогда Ворд.Selection.InsertRowsBelow(1);//САМА ВСТАВКА КонецЕсли; Итого = Итого + стрСчет.Сумма; КонецЦикла; ТекстВ_Ячейку(сч+1,5,Итого); Док.Application.Visible = Истина; КонецФункции Функция ТекстВ_Ячейку(Стр,Кол,Текст) Табл.Cell(стр,Кол).Select();//Строка, Колонка Ворд.Selection.TypeText(строка(Текст)); КонецФункции
Формулировка задачи:
Добрый день. Ломаю голову над казалось бы элементарной задачей. В документе Word существует таблица, уже сформатированная должным образом. В нее необходимо выгружать данные с листа Excel. Копирование / вставка из ячеек проходит,
но мне при этом нужно добавлять строки в середине таблицы в Worde
.
Делаю так
пробовала
Код к задаче: «Вставка строки в уже существующую таблицу в Word»
textual
Dim tblNew As Table Dim rowNew As Row Set tblNew = ActiveDocument.Tables(2) 'вставка перед 2ой строкой Set rowNew = tblNew.Rows.Add(BeforeRow:=tblNew.Rows(2))
Полезно ли:
12 голосов , оценка 3.833 из 5