powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вставить из ClipBoard в Word-таблицу
8 сообщений из 8, страница 1 из 1
Вставить из ClipBoard в Word-таблицу
    #38071799
Zaharius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется заранее созданная таблица в документе Word, с отформатированными нужным образом стобцами, подобранными размерами, типами и цветом шрифтов в каждои из столбцов и т.д.
Из таблицы другого приложения (скажем, MSFlexGrid или Datagrid) периодически копируются изменяемые табличные данные и вставляются в эту вордовскую таблицу. Но при этом в таблице меняется форматирование, то есть ранее выставленные форматы текста теряются.
Есть ли возможность вставить таблицу из буфера в заготовленную таблицу Word так, чтобы вставляемые данные (текст) приняли форматирование то, которые до этого были в соответствующих ячейках таблицы?
...
Рейтинг: 0 / 0
Вставить из ClipBoard в Word-таблицу
    #38071814
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правка - специальная вставка - неформатированный текст
...
Рейтинг: 0 / 0
Вставить из ClipBoard в Word-таблицу
    #38071877
Zaharius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Proправка - специальная вставка - неформатированный текст
В таком случае вставляемый текст приобретает форматирование не то, которое существует в таблице, а формативрование "по умолчанию". Это не подходит!
...
Рейтинг: 0 / 0
Вставить из ClipBoard в Word-таблицу
    #38071908
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересный вопрос. Не совсем понятно, что вставляется? Будем считать что таблица в формате MS Word.

Тогда только макросом, задействовав PasteAndFormat. В Word есть возможность вставки как в прилегающем формате, так и в формате оригинала. Для ячеек и таблиц это не работает, только если переносить текст каждой ячейки отдельно. Макрос вставки ячеек (подряд, от курсора) с сохранением оригинального формата:
Код: 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.
Public Sub Paste_CellsSurrounding() ' Буфер > Вставить > Ячейки > Формат: использовать соседний

    On Error Resume Next
    ' первая целевая ячека
Dim C1 As Word.Cell

    Err.Clear
    Set C1 = Selection.Cells(1)
    If Err.Number <> 0 Then Exit Sub
    ' блокируем интерфейс
Dim B As Boolean

    B = Application.ScreenUpdating
    If B Then Application.ScreenUpdating = False
    ' вставка во временный документ
    
Dim D As Word.Document
    
    Set D = Application.Documents.Add( _
                DocumentType:=wdNewBlankDocument, _
                Visible:=False)
    D.Range.Paste ' AndFormat Type:=Word.wdFormatOriginalFormatting
    ' первая исходная ячейка
Dim C2 As Word.Cell
    
    Err.Clear
    Set C2 = D.Range.Cells(1)
    If Err.Number = 0 Then
        ' перенос ячеек
        Do
            ' копируем
            With C2.Range
                .MoveEnd Unit:=Word.wdCharacter, Count:=-1
                .Copy
            End With
            ' вставляем
            With C1.Range
                .MoveEnd Unit:=Word.wdCharacter, Count:=-1
                .PasteAndFormat Type:=Word.wdFormatSurroundingFormattingWithEmphasis
            End With
            ' следующая пара
            Set C1 = C1.Next
            If C1 Is Nothing Then Exit Do
            Set C2 = C2.Next
            If C2 Is Nothing Then Exit Do
        Loop
    End If
    ' закрываем временный
    D.Close SaveChanges:=False
    ' разблокируем интерфейс
    If B Then Application.ScreenUpdating = True
    
End Sub


Думаю, общая идея понятна.
...
Рейтинг: 0 / 0
Вставить из ClipBoard в Word-таблицу
    #38073366
Zaharius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сын вождя,

Спасибо. Это работает, но очень медленно (в моём варианте необходимо копировать таблицы с сотнями и тысячи строк).
Куда быстрее, но не настолько, чтоб меня устраивало, оставлять в таблице одну строку-образец, в которую вставляемые данные не копируются, а после осуществления вставки копировать формат с каждой ячейки этой строки на весь соответствующий ей столбец, а потом эту строку-образец удалять. Но на вид эта процедура просто ужасна и работает, как я говорил, не очень быстро.
...
Рейтинг: 0 / 0
Вставить из ClipBoard в Word-таблицу
    #38073372
Zaharius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если всё-таки у кого-то появятся идеи, чуть проще объясню, что мне надо.
1. Вставляем в вордовский документ две таблицы, заполняем ячейки произвольными данными.
2. Форматируем столбцы таблиц по-разному (разные цвета, виды и размеры шрифта и т.д.).
3. Выделяем все или несколько ячеек первой таблицы, нажимаем "копировать".
4. Выделяем несколько ячеек второй таблицы. Выбираем Вставка-специальная вставка-неформатированный текст.
5. Текст вставляется, но не принимает те форматы, которые до этого были в соответствующих столбцах таблицы, а становится черным Times New Roman.
Как с этим бороться???
...
Рейтинг: 0 / 0
Вставить из ClipBoard в Word-таблицу
    #38073406
Фотография Сын вождя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zaharius...очень медленно...
Если в таблице только текст, то макрос можно ускорить:
Код: 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.
62.
Public Sub Paste_CellsSurrounding() ' Буфер > Вставить > Ячейки > Форма: использовать соседний

    On Error Resume Next
    ' первая целевая ячека
Dim C1 As Word.Cell

    Err.Clear
    Set C1 = Selection.Cells(1)
    If Err.Number <> 0 Then Exit Sub
    ' готовим интерфейс
Dim B As Boolean
Dim V As Word.WdViewType

    B = Application.ScreenUpdating
    If B Then Application.ScreenUpdating = False
    With ActiveDocument.ActiveWindow.ActivePane.View
        V = .Type
        If V <> Word.wdNormalView Then .Type = Word.wdNormalView
    End With
    ' вставка во временный документ
    
Dim D As Word.Document
    
    Set D = Application.Documents.Add( _
                DocumentType:=wdNewBlankDocument, _
                Visible:=False)
    D.Range.Paste ' AndFormat Type:=Word.wdFormatOriginalFormatting
    ' первая исходная ячейка
Dim C2 As Word.Cell
Dim S As String

    Err.Clear
    Set C2 = D.Range.Cells(1)
    If Err.Number = 0 Then
        ' перенос ячеек
        Do
            ' копируем
            With C2.Range
                .MoveEnd Unit:=Word.wdCharacter, Count:=-1
                S = .Text ' .Copy
            End With
            ' вставляем
            With C1.Range
                .MoveEnd Unit:=Word.wdCharacter, Count:=-1
                .Text = S '.PasteAndFormat Type:=Word.wdFormatSurroundingFormattingWithEmphasis
            End With
            ' следующая пара
            Set C1 = C1.Next
            If C1 Is Nothing Then Exit Do
            Set C2 = C2.Next
            If C2 Is Nothing Then Exit Do
        Loop
    End If
    ' закрываем временный
    D.Close SaveChanges:=False
    ' восстанавливаем интерфейс
    With ActiveDocument.ActiveWindow.ActivePane.View
        If V <> Word.wdNormalView Then .Type = V
    End With
    If B Then Application.ScreenUpdating = True
    
End Sub


Для больших таблиц, лучше подойдет вариант вставки с заменой и последующим форматированием. При форматировании больших таблиц Word тоже сильно тормозит, так что неизвестно, что будет быстрее. Немного ускоряет дело переключение в режим просмотра без разбивки на страницы.
...
Рейтинг: 0 / 0
Вставить из ClipBoard в Word-таблицу
    #38073493
Zaharius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё раз спасибо, буду тестировать и сравнивать
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Вставить из ClipBoard в Word-таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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