Добавить строку в таблицу word программно

   Pereliviya

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(): «запрашиваемый номер семейства не существует».

   Pereliviya

1 — 24.09.13 — 10:17

подскажите что делаю не так? Плиззз

   Pereliviya

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 = глФрм(Счет.Итог(«Сумма»));

   Pereliviya

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) — это и есть таблица.

   Pereliviya

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 = Счет.НомерСтроки;

   Pereliviya

9 — 24.09.13 — 12:29

(8) в том и проблема, что он вообще ругается на Cell(), не принимает ничего, кроме Cell(1, 1)

Даже если пишу руками Cell(2, 1) уже не работает!

   Масянька

10 — 24.09.13 — 13:11

(9) Покажи скриншот таблицы Word.

   Pereliviya

11 — 24.09.13 — 13:16

(10) типовая форма T-6а (Приказ на отпуск)

   Масянька

12 — 24.09.13 — 13:33

(11) Это «скриншот»? Я просила скриншота таблицы (с макета) Word.

   Pereliviya

13 — 25.09.13 — 06:43

   BuHu

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 строки таблицы — шапка.

   Pereliviya

17 — 25.09.13 — 09:05

(15) пробовала уже так, не работает :(

   Масянька

18 — 25.09.13 — 09:33

(17) А вообще, работа с макетом получается (ну, кроме таблицы)?

   Pereliviya

19 — 25.09.13 — 10:32

(18) Да, получается. И пробовала в другие таблицы в макете вставлять строки, все нормуль, а в которую нужно (третью со сложной шапкой) не хочет и все.

   Масянька

20 — 25.09.13 — 10:55

(19) Как вариант, ниже этой «сложной таблицы» вставь просто строку с нумерацией колонок и попробуй добавить в эту таблицу строки. Если получится — потом просто удалить не нужные строки и слить 2 таблицы.

Судя-по всему — шапка не нравится.

   Юрий Юрьевич

21 — 25.09.13 — 10:55

   Pereliviya

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……)

Не факт, что взлетит, но я бы попробовала :)

   Pereliviya

24 — 25.09.13 — 11:05

(23) пробовала, не взлетело

   Pereliviya

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

VB

CSharp

rows [Office development in Visual Studio], adding to Word tables

tables [Office development in Visual Studio], adding rows and columns

columns [Office development in Visual Studio], adding to Word tables

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

  1. 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

  1. 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

  1. 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

  1. 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-ой таблицы из формы нужно сделать так, чтобы при добавлении новой записи создавалась и строчка в которую бы вписывались эти данные
Заранее спасибо!

Вот код, который я сейчас имею:

Visual Basic
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
Public i As Integer
 
Private Sub UserForm_Activate()
i = 2
ComboBox1.AddItem "доктора"
ComboBox1.AddItem "кандидата"
ComboBox2.AddItem "архитектуры"
ComboBox2.AddItem "биологических наук"
ComboBox2.AddItem "ветеринарных наук"
End Sub
 
Private Sub CommandButton1_Click()
ActiveDocument.Tables(2).Cell(i, 1).Range = i - 1
ActiveDocument.Tables(2).Cell(i, 2).Range = TextBox1 & ", " & TextBox2 & " // " & TextBox3 & ", " & TextBox4 & "г. №" & TextBox5
i = i + 1
End Sub
 
Private Sub CommandButton4_Click()
ActiveDocument.Tables(2).Cell(i, 1).Range = i - 1
ActiveDocument.Tables(2).Cell(i, 2).Range = TextBox6 & ", " & TextBox7 & ", " & TextBox9 & " г., Электронный доступ: [" & TextBox8 & "]"
i = i + 1
End Sub
 
Private Sub CommandButton6_Click()
ActiveDocument.Tables(2).Cell(i, 1).Range = i - 1
ActiveDocument.Tables(2).Cell(i, 2).Range = TextBox10 & ", " & TextBox11 & ", на соискание степени" & " " & ComboBox1.Text & " " & ComboBox2.Text
i = i + 1
End Sub
 
Private Sub CommandButton8_Click()
ActiveDocument.Tables(2).Cell(i, 1).Range = i - 1
ActiveDocument.Tables(2).Cell(i, 2).Range = TextBox14 & ", " & TextBox15 & " / " & TextBox16 & ", " & TextBox17 & ", " & TextBox18 & " г."
i = i + 1
End Sub



0



S.V.I.N.

5 / 5 / 1

Регистрация: 06.04.2012

Сообщений: 38

16.07.2013, 12:21

2

Уважаемый 3orP,
добавлять новую строку в таблицу можно следующим образом

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
''создаем таблицу
.ActiveDocument.Tables.Add(Range:=.Selection.Range, NumRows:=1, NumColumns:=2)
            With .Selection.Tables(1)
                .Style = "Сетка таблицы"
                .ApplyStyleHeadingRows = True
                .ApplyStyleLastRow = False
                .ApplyStyleFirstColumn = True
                .ApplyStyleLastColumn = False
            End with
''''''''''''
 
'' добавляем новую строку в таблицу, если кол-во строк больше 1. Это условие необходимо для того, что бы
'' при первом прогоне у нас не было пустой строки в таблице
if Selection.Tables(1).Rows.Count <> 1 then
     Selection.InsertRowsBelow 1
end if
'''''''''''
 
'''а далее ваш код
ActiveDocument.Tables(1).Cell(i, 1).Range = i - 1
ActiveDocument.Tables(1).Cell(i, 2).Range = TextBox14 & ", " & TextBox15 & " / " & TextBox16 & ", " & TextBox17 & ", " & TextBox18 & " г."
i = i + 1

Добавлено через 8 минут
небольшая поправка

Visual Basic
1
2
3
4
5
6
'' добавляем новую строку в таблицу, если кол-во строк больше 1. Это условие необходимо для того, что бы
'' при первом прогоне у нас не было пустой строки в таблице
If Selection.Tables(1).Cell(1, 1).Range <> "" Then
     Selection.InsertRowsBelow 1
end if
'''''''''''



1



157 / 2 / 3

Регистрация: 27.12.2012

Сообщений: 26

16.07.2013, 14:05

 [ТС]

3

S.V.I.N., спасибо большое!
а если таблица вот такая и надо вставлять строки перед последней строкой «ИТОГО»?

Вложения

Тип файла: docx п.docx (14.1 Кб, 81 просмотров)



0



S.V.I.N.

5 / 5 / 1

Регистрация: 06.04.2012

Сообщений: 38

16.07.2013, 14:40

4

Т.к. строки нужно вставлять перед последней строкой, то для этого нужно посчитать общее кол-во строк в таблице. Затем из полученного числа вычитаем единичку, т.е. мы получим индекс предпоследней строки таблицы. Далее выделяем предпоследнюю строку и вставляем новую строчку в таблицу…

Visual Basic
1
2
3
4
5
6
7
8
If Selection.Tables(1).Cell(1, 1).Range <> "" Then
 
    ''вот тут мы как раз и вычмсляем предпоследний индекс строки таблицы и выделяем его
    Selection.Tables(1).Rows(Selection.Tables(1).Rows.Count - 1).Select  
    
    ''вставляем новую строчку вниз, после выделенной строки
     Selection.InsertRowsBelow 1
End If



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

Понравилась статья? Поделить с друзьями:
  • Добавить строку в таблицу excel python
  • Добавить строку в excel одной кнопкой
  • Добавить строку в excel гугл
  • Добавить строку в excel в таблице на клавиатуре
  • Добавить строку в excel в таблице вместе с ячейками середине как