Расширяемая таблица Excel в документ Word - PullRequest
0 голосов
/ 06 марта 2019

Мне нужно связать свою таблицу Excel в документе Word, но опция, которая уже есть в Word, может автоматически обновить файл фиксированного размера, например, если я скопирую таблицу 4x4 из Excel и вставлю ее со ссылкой в ​​Word, она останется 4x4,Только эти ячейки можно обновить, если я добавлю столбец или строку в Excel, они не появятся в Word.

Надеюсь, у вас возникла моя проблема: D

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Просто назовите диапазон в Excel, прежде чем скопировать и вставить ссылку в Word.С этого момента любые изменения в области или содержимом именованного диапазона в Excel будут отражаться в Word.

В качестве альтернативы, если вы уже установили ссылку, присвойте диапазону имя в Excel, а затем измените полекод в Word.Для этого выберите связанный диапазон и нажмите Shift-F9.Теперь он должен выглядеть примерно так:

{ LINK Excel.Sheet.12 "C:\\Test\\TestMergeData.xlsx" "Sheet1!R1C1:R2C2" \a \p }

Измените «Sheet1! R1C1: R2C2» (включая кавычки) на имя вашего диапазона (без кавычек), затем нажмите F9, чтобы обновить ссылку.

0 голосов
/ 06 марта 2019

Как пользователь, можно дважды щелкнуть объект Excel, чтобы активировать его, а затем перетащить рамку, чтобы развернуть / сжать ее, чтобы отобразить различное количество строк и / или столбцов.

Этому нет эквивалента в объектной модели Word - это невозможно сделать с помощью кода. Если только ...

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

Например, если код поля Link предназначен для диапазона A1: B2

{ LINK Excel.Sheet.12 C:\\Test\\TestMergeData.xlsx Sheet1!R1C1:R2C2 \a \p }

, изменив его на A1: C3 (R1C1: R3: C3), отобразятся три строки истолбцы вместо двух.(Вы можете просматривать и редактировать коды полей, нажав Alt + F9.)

Код VBA будет выглядеть следующим образом:

Sub ChangeRangeLinkedExcel()
    Dim fld As Word.Field
    Dim ils As Word.InlineShape
    Dim sFldCode As String
    Dim posRangeStart As Long
    Dim sLinkLeft As String, sRange As String, sLinkRight As String

    For Each ils In ActiveDocument.InlineShapes
        If ils.Type = 2 Then ' wdInlineShapeLinkedOLEObject
            Set fld = ils.Range.Fields(1)
            sFldCode = fld.code
            posRangeStart = InStr(sFldCode, "!R")
            sLinkLeft = Left(sFldCode, posRangeStart)
            sRange = Mid(sFldCode, posRangeStart + 1, 9)
            sLinkRight = Right(sFldCode, Len(sFldCode) - Len(sLinkLeft) - Len(sRange))
            sRange = "R1C1:R3C3"
            fld.code.Text = sLinkLeft & sRange & sLinkRight
            fld.Update
        End If
    Next
End Sub

Если объект Excel не является полем Link, тогдаединственная возможность, которую я когда-либо нашел, изменить то, что он отображает с помощью кода, - это удалить объект, а затем воссоздать его.Когда новый внедренный объект вставляется, он автоматически отображает указанное количество строк и столбцов.

...