Страницы: 1
RSS
Как из Excel узнать номер таблицы в Word?
 
Всем привет!
Подскажите, как можно решить такую задачу:
В Word в фоновом(!) режиме из Excel вставляю таблицу таким кодом:
Код
WD.Bookmarks("Таблица_1").Range.PasteExcelTable _
        LinkedToExcel:=False, _
        WordFormatting:=True, _
        RTF:=False


Далее, обращаюсь в цикле к каждой ячейке таблицы и выравниваю текст по центру и по вертикале вот таким кодом:

Код
WD.Tables(1).cell(i, j).Range.ParagraphFormat.Alignment = 1
WD.Tables(1).cell(i, j).Range.Cells.VerticalAlignment = 1

Возникает проблема, что номер таблицы привязан жестко, и он может быть не всегда 1. Возможно, что таблица вставляется в середину документа, и при этом уже есть другие таблицы в начале и в конце документа.

Как можно узнать номер таблицы, которую вставляю через PasteExcelTable или же, как сразу центрировать данные (и по вертикали и по горизонтали) во вставляемой таблице?

Метод Selection, применяемый к ActiveDocument не подходит, т.к. необходимо, чтобы Word был в фоновом режиме. Да и даже не в фоновом, что-то не особо получается...

Может быть как-то в объектную переменную эту создаваемую таблицу записывать и далее уже к объекту таблицы обращаться, но как это сделать не знаю!?
Изменено: Борис13 - 20.11.2020 21:38:11
 
Доброе время суток
Цитата
Борис13 написал:
Может быть как-то в объектную переменную эту создаваемую таблицу записывать
Можно проще - задать идентификатор созданной таблицы
Код
Public Sub test()
    Dim pWord As Object, pDoc As Object, docRange As Object
    Set pWord = CreateObject("Word.Application")
    pWord.Visible = True
    Set pDoc = pWord.Documents.Open("C:\Temp\0470616.docx")
    Set docRange = pDoc.Bookmarks("my").Range
    ActiveSheet.Range("A1:B3").Copy
    docRange.PasteExcelTable False, True, False
    docRange.Tables(1).ID = "myInsertId"
End Sub
 
Цитата
Андрей VG написал:
Можно проще
Выдает ошибку на последней строке:  
Код
docRange.Tables(1).ID = "myInsertId"
 Видимо из-за того, что в docRange. записано ...Bookmarks("my").Range, а после вставки таблицы Bookmarks("my") исчезает. Либо мои суждения не верны, но в любом случае возникает ошибка.

И как потом обратиться к нужной таблице? Так:
Код
Dim RowCount As Integer
RowCount = docRange.Tables(1).ID("myInsertId").Rows.Count
?
Изменено: Борис13 - 21.11.2020 09:55:26
 
Борис13, я правильно понимаю, что вы программируете методом волшебных заклинаний? Тестовый документ приложил. Не забудьте положить в папку c:\temp.
Цитата
Борис13 написал:
И как потом обратиться к нужной таблице?
Можете сразу с не работать, например
Код
    Debug.Print docRange.Tables(1).Rows.Count
    'Or
    Dim pTable As Object
    Set pTable = docRange.Tables(1)
    Debug.Print pTable.Rows.Count

Или найти её среди таблиц документа (надеюсь вы не вставляете таблицу в таблицу или иной объект).
Код
    Dim pTable As Object, foundTable As Object
    Set foundTable = Nothing
    For Each pTable In pDoc.Tables
        If pTable.ID = "myInsertId" Then
            Set foundTable = pTable
            Exit For
        End If
    Next
    If Not foundTable Is Nothing Then
        Debug.Print foundTable.Rows.Count
    End If
 
Андрей VG, возможно некая доля заклинаний в моем подходе и присутствует, но я и не программист, а экономист, так что простительно)) Спасибо за внимание к моему вопросу. Ваш код работает без проблем, но у меня почему-то пару раз возникала ошибка, хотя вроде бы все прописал правильно. Видимо, что-то все-таки было неверно. Плохо, что не сумел явным образом определить где возникала ошибка (опять "заклинания")).
Но все равно заметил определенную разницу в работе наших файлов: На изображении состояние Закладок в Word сразу после вставки таблицы - почему то ее название перезатирается на диапазон, а в ваших файлах название закладки остается.
Страницы: 1
Наверх