С Новым годом! Форум программистов, компьютерный форум, киберфорум
MS Office Word
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/133: Рейтинг темы: голосов - 133, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 4

Копирование данных из одной таблицы в другую

12.11.2012, 22:58. Показов 25124. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два файла с разными таблицами, надо по номеру из 3-го столбца в одной таблице найти и скопировать данные из другой. Как в примере в 6-й строчке.
Не знаю как работать с такими таблицами.
Миниатюры
Копирование данных из одной таблицы в другую   Копирование данных из одной таблицы в другую  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.11.2012, 22:58
Ответы с готовыми решениями:

Копирование данных из одной таблицы в другую в пределах одной базы. Не работает счетчик
Делаю копирование данных из одной таблицы в другую в пределах одной базы. procedure TForm16.Button2Click(Sender: TObject); var ...

Копирование данных из одной таблицы в другую
procedure TForm10.sTreeViewEx1Change(Sender: TObject; Node: TTreeNode); begin if streeviewex1.Selected.SelectedIndex=2 then while...

Копирование данных из одной таблицы в другую.
Доброго всем времени суток. Возникла такая проблема. Есть две таблицы - исходная Сотрудники (Имя, Фамилия, Отчество, должность) и ...

5
440 / 33 / 4
Регистрация: 12.09.2011
Сообщений: 109
12.11.2012, 23:15
Я так понимаю, что оба файла рабочие, т.е. находятся в постоянно в работе и изменяются. Если да, то в Word есть специальная команда "Специальная вставка". Вы копируете данные из одного файла(таблицы) в буфер обмена, а затем, выделив место куда нужно вставить данные, вставляете их методом "Специальная вставка", при этом изменения в источнике данных будут отображаться в приемнике, если при копировании у Вас был установлен флажок "Связать". Если же Вы просто хотите перенести данные, то выложенные Вами скриншоты не отображают всей полноты картины, достаточной для написания макроса переноса данных и его тестирования.
0
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 4
13.11.2012, 15:41  [ТС]
Нужно именно перенести данные. В аттаче два файла с отрывками таблиц.
У меня даже частично не получилось автоматизировать.
Как сделать что бы скопировав несколько ячеек таблицы, можно было добавить их содержимое к содержимому других ячеек? InsertAfter добавляет в конец выделения.
Пробовал записать макрос, копирующий одну из ячеек, но при поиске курсор остаётся на месте.
Кликните здесь для просмотра всего текста
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
Sub Макрос ()
'
    t = 0
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    t = Selection.Text
    Selection.Copy
    Windows( _
        "tabl2.doc [Режим ограниченной функциональности]" _
        ).Activate
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = t
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindAsk
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.MoveRight Unit:=wdCell
    Selection.MoveRight Unit:=wdCell
    Selection.Copy
    Windows( _
        "tabl1.doc [Режим ограниченной функциональности]" _
        ).Activate
    Selection.MoveLeft Unit:=wdCharacter, Count:=2
    Selection.HomeKey Unit:=wdLine
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.PasteAndFormat (wdPasteDefault)
End Sub
Вложения
Тип файла: rar tabl.rar (50.7 Кб, 25 просмотров)
0
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,576
13.11.2012, 20:46
Условия выполнения кода:
  1. должно быть открыто два документа: документ-назначение и документ-источник;
  2. активным должен быть документ назначение;
  3. в коде нужно указать имя документа-источника (вверху кода в константе);
  4. перед выполнением кода поставить курсор в ячейку, в которой находится искомый текст.
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
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
Sub Procedure_1()
    
    'Здесь нужно указать имя документа, в котором ищем и из которого берём данные.
    Const sSourcePath As String = "tabl2.doc"
    
    Dim lFirstRow As Long
    Dim lLastRow As Long
    Dim lRowsCount As Long
    Dim i As Long, j As Long
    Dim lTableRowsCount As Long
    Dim sArray_1(1 To 2) As String
    Dim sArray_2() As String
    Dim sCellText_1 As String, sCellText_2 As String
    Dim lTargetRowNumber As Long
    Dim docSource As Word.Document
    Dim oTable As Word.Table
    
    'Обращаться к документу-источнику будем через переменную docSource.
    Set docSource = Documents(sSourcePath)
    
    'Ищем в документе-источнике текст из активного документа, где находится курсор.
    With docSource.Content.Find
        '-2 - т.к. в ячейке в конце есть 2 специальных символа:
            '1) знак "Конец ячейки" - его видно, если включён режим
                'отображения непечатаемых символов;
            '2) неизвестный знак, который не видно.
                'Порядковый номер в таблице ANSI: 7
        .Text = Left(Selection.Cells(1).Range.Text, Len(Selection.Cells(1).Range.Text) - 2)
        'Если не найдено, то выходим из кода.
        If .Execute = False Then
            Exit Sub
        'Иначе, запоминаем номер строки, где было найден текст.
        Else
        
            'Parent - это фрагмент документа, где находится найденный текст.
            'Записываем номер строки, где был найден текст.
            lFirstRow = .Parent.Cells(1).RowIndex
            
            'Обращаться к таблице будем через переменную.
            Set oTable = .Parent.Tables(1)
            
        End If
        
    End With
    
'---------------------------------------------------------------------------------------------------
    '1. Определяем, с какой по какую строку нужно двигаться.
    
    'Записываем количество строк в таблице.
    'Чтобы при движении вниз, узнать, что достигнут конец таблицы.
    lTableRowsCount = oTable.Rows.Count
    
    'Определение номера последней строки.
    lLastRow = lFirstRow
    
    'Смотрим, не является ли текущая строка последней в таблице.
    If lLastRow = lTableRowsCount Then
        GoTo metka
    End If
    
    'Анализируем остальные строки.
    lLastRow = lLastRow + 1
    Do
        
        'Проверяем, не закончилась ли объединённая ячейка в первом столбце.
        'Если обращаться к ячейке, которой нет, то будет ошибка.
        'On Error Resume Next - позволяет продолжить код при возникновении ошибки.
        On Error Resume Next
        
            If oTable.Cell(lLastRow, 1) Is Nothing Then
            Else
                lLastRow = lLastRow - 1
                GoTo metka
            End If
        
        'On Error GoTo 0 - отменяет действия On Error Resume Next
        On Error GoTo 0
        
        'Смотрим, есть ли текст в 4 столбце.
        'Characters.Count = 1 - это знак "Конец ячейки".
        If oTable.Cell(lLastRow, 4).Range.Characters.Count = 1 Then
            lLastRow = lLastRow - 1
            GoTo metka
        End If
        
        'Смотрим, не является ли текущая строка последней в таблице.
        If lLastRow = lTableRowsCount Then
            GoTo metka
        End If
        
        'Переход к следующей строке.
        lLastRow = lLastRow + 1
        
    Loop
    
metka:
    
    'Определяем сколько строк нужно взять.
    lRowsCount = lLastRow - lFirstRow + 1
    
    
'---------------------------------------------------------------------------------------------------
    '2. Поместим данные в массивы, чтобы проще было код написать.
    
    'Чтобы проще ориентироваться в коде, данные
    'из ячеек помещаем в переменные.
    sCellText_1 = oTable.Cell(lFirstRow, 3).Range.Text
    sCellText_2 = oTable.Cell(lFirstRow, 6).Range.Text
    'Убираем лишние символы.
    sCellText_1 = Left(sCellText_1, Len(sCellText_1) - 2)
    sCellText_2 = Left(sCellText_2, Len(sCellText_2) - 2)
    'Помещаем в массив.
    sArray_1(1) = sCellText_1
    sArray_1(2) = sCellText_2
 
    ReDim sArray_2(1 To lRowsCount, 1 To 2)
    
    j = 1
    
    For i = lFirstRow To lLastRow Step 1
        
        sCellText_1 = oTable.Cell(i, 4).Range.Text
        sCellText_2 = oTable.Cell(i, 5).Range.Text
        
        sCellText_1 = Left(sCellText_1, Len(sCellText_1) - 2)
        sCellText_2 = Left(sCellText_2, Len(sCellText_2) - 2)
        
        sArray_2(j, 1) = sCellText_1 & "/" & sCellText_2
        
        
        sCellText_1 = oTable.Cell(i, 7).Range.Text
        sCellText_2 = oTable.Cell(i, 8).Range.Text
        
        sCellText_1 = Left(sCellText_1, Len(sCellText_1) - 2)
        sCellText_2 = Left(sCellText_2, Len(sCellText_2) - 2)
        
        sArray_2(j, 2) = sCellText_1 & "/" & sCellText_2
        
        j = j + 1
        
    Next i
    
    
'---------------------------------------------------------------------------------------------------
    '3. Переносим данные из массивов в документ-назначение.
    
    'Берём номер строки, где ставили курсор.
    lTargetRowNumber = Selection.Cells(1).RowIndex
    
    'Переносим данные в первый столбец.
    Selection.Tables(1).Cell(lTargetRowNumber + 1, 1).Range.Text = sArray_1(1)
    
    'Переносим данные в третий столбец.
    Selection.Tables(1).Cell(lTargetRowNumber + 1, 3).Range.Text = sArray_1(2)
    
    'Переносим данные во второй и чётвёртый столбцы.
    For i = 1 To UBound(sArray_2, 1) Step 1
        sCellText_1 = Selection.Tables(1).Cell(lTargetRowNumber, 2).Range.Text
        sCellText_2 = Selection.Tables(1).Cell(lTargetRowNumber, 4).Range.Text
        sCellText_1 = Left(sCellText_1, Len(sCellText_1) - 2)
        sCellText_2 = Left(sCellText_2, Len(sCellText_2) - 2)
        Selection.Tables(1).Cell(lTargetRowNumber, 2).Range.Text = _
            sCellText_1 & "/" & sArray_2(i, 1)
        Selection.Tables(1).Cell(lTargetRowNumber, 4).Range.Text = _
            sCellText_2 & "/" & sArray_2(i, 2)
        lTargetRowNumber = lTargetRowNumber + 1
    Next i
    
End Sub
2
0 / 0 / 0
Регистрация: 12.11.2012
Сообщений: 4
14.11.2012, 09:06  [ТС]
Огромнейшее спасибо. Теперь буду разбираться.
0
4 / 4 / 0
Регистрация: 08.11.2012
Сообщений: 106
19.11.2012, 00:45
Скрипт,Помог.... Благодарю...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.11.2012, 00:45
Помогаю со студенческими работами здесь

копирование данных из одной таблицы в другую
Существует таблица, в ней есть 3 строки, 1 содержит картинку, 2 и 3 текст, нужно что бы при нажатие на таблицу, данные из 2ой строки...

Копирование данных из одной таблицы в другую.
Всем добрый день. Есть задача, суть её состоит в том, что в одной таблице существуют 2 поля, 1-е поле содержит данные, а 2-е поле должно...

Копирование данных с одной таблицы в другую
Подскажите пожалуйста запрос на копирование данных с одной таблицы в другую, где поля одинаковы. Заранее спасибо!!!

Копирование данных из одной таблицы в другую
хочу копировать из одной таблицы на другой. Но дает ошибку.. procedure TForm1.Button1Click(Sender: TObject); begin try ...

Копирование данных из одной таблицы в другую
Здравствуйте, Уважаемые Форумчане! База данных называется test. Помогите, пожалуйста с запросом в БД MySQL. Нужно скопировать данные из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru