1

Тема: Выделение таблиц в составе контура автофигуры

Базовая задача состоит в переносе данных тыблиц из ворда в эксель. С этой целью требуется выделить все таблицы документа. Но увы макросы не видят таблиц так как они замурованы в контурах фигур.

Каким образом лучше выполнить данную задачу и реально ли вообще это сделать помимо метода скрещивания с ПДФ и обратного исцеления в ворд.

Post's attachments

трабл1.docx 297.38 Кб, 3 скачиваний с 2019-03-20 

You don't have the permssions to download the attachments of this post.

2

Re: Выделение таблиц в составе контура автофигуры

andrewka пишет:

Базовая задача состоит в переносе данных тыблиц из ворда в эксель. С этой целью требуется выделить все таблицы документа. Но увы макросы не видят таблиц так как они замурованы в контурах фигур.

Каким образом лучше выполнить данную задачу и реально ли вообще это сделать помимо метода скрещивания с ПДФ и обратного исцеления в ворд.

Таблицы в документе могут появляться в различных контейнерах: самом документе, в фигурах (типа TextBox), фреймах.
В примере ниже приведены цикла обхода таблиц в различных объектах: документе, в фигурах и в фреймах. Переменная

3

Re: Выделение таблиц в составе контура автофигуры

andrewka пишет:

Базовая задача состоит в переносе данных тыблиц из ворда в эксель. С этой целью требуется выделить все таблицы документа. Но увы макросы не видят таблиц так как они замурованы в контурах фигур.

Каким образом лучше выполнить данную задачу и реально ли вообще это сделать помимо метода скрещивания с ПДФ и обратного исцеления в ворд.

ОПЯТЬ ОБРЕЗАЕТСЯ ОТВЕТ
----------------------------------
Таблицы в документе могут появляться в различных контейнерах: самом документе, в фигурах (типа TextBox), фреймах.
В примере ниже приведены цикла обхода таблиц в различных объектах: документе, в фигурах и в фреймах. Переменная "o" введена для отладки, чтобы можно было на строках вида "o = 0" устанавливать точки прерывания, чтобы смотреть, как прошло выделение очередной таблицы.

Sub LoopVariousTables()
Dim sh As Shape
Dim tbl As Table
Dim fr As Frame
Dim o
For Each tbl In ActiveDocument.Tables
    tbl.Select
    o = 0
Next
For Each sh In ActiveDocument.Shapes
    If sh.Type = msoTextBox Then
        For Each tbl In sh.TextFrame.TextRange.Tables
            tbl.Select
            o = 0
        Next
    End If
Next
For Each fr In ActiveDocument.Frames
    For Each tbl In fr.Range.Tables
        tbl.Select
        o = 0
    Next
Next
End Sub

4

Re: Выделение таблиц в составе контура автофигуры

andrewka пишет:

Каким образом лучше выполнить данную задачу и реально ли вообще это сделать помимо метода скрещивания с ПДФ и обратного исцеления в ворд.

задача достаточно хитрая, особенно боковые и нижние штампы(да и рамка по  странице)

попробовала решить
--верхняя шапка вытаскивается с небольшой доводкой и переносится на все страницы(сквозные строки)
--основные таблицы --тоже регулярные, без объединенных строк, автоподбор высоты
--правый нижний штамп тоже вроде вытаскивается

короче, более-менее решается, но колоссальное время на чистовую доводку

если у вас эта спецификация 712 страниц А3 (в ворде), то ворд конечно это не потянет

5

Re: Выделение таблиц в составе контура автофигуры

shanemac51 пишет:
andrewka пишет:

Каким образом лучше выполнить данную задачу и реально ли вообще это сделать помимо метода скрещивания с ПДФ и обратного исцеления в ворд.

задача достаточно хитрая, особенно боковые и нижние штампы(да и рамка по  странице)

попробовала решить
--верхняя шапка вытаскивается с небольшой доводкой и переносится на все страницы(сквозные строки)
--основные таблицы --тоже регулярные, без объединенных строк, автоподбор высоты
--правый нижний штамп тоже вроде вытаскивается

короче, более-менее решается, но колоссальное время на чистовую доводку

если у вас эта спецификация 712 страниц А3 (в ворде), то ворд конечно это не потянет

Да, с первого раза не получилось. При переносе таблиц курсор в какой-то момент начинает прыгать в зону ранее вставленных данных и вставка происходит не в конец документа. Как с этим бороться не знаю. Возможно макрос не верно определяет самую последнюю строку с данными

Option Explicit

Sub CopyTables()

Dim xlApp As Excel.Application
Dim xlwb As Excel.Workbook

Dim sh As Shape
Dim tbl As Table
Dim LastRow As Long, LastColumn As Integer
Dim tblRange As Range

Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlwb = xlApp.Workbooks.Add


For Each sh In ActiveDocument.Shapes
If sh.Type = msoTextBox Then
For Each tbl In sh.TextFrame.TextRange.Tables
      On Error Resume Next
        Range("A" & Rows.Count).End(xlUp).Offset(1).Select
        LastRow = tbl.Rows.Count
        LastColumn = tbl.Columns.Count
        Set tblRange = tbl.Cell(1, 1).Range
        tblRange.End = tbl.Cell(LastRow, LastColumn).Range.End
        tblRange.Copy
        xlwb.Worksheets(1).Paste
 
Next

End If
Range("A" & Rows.Count).End(xlUp).Offset(1).Select ' Вот тут походу трабл
Next

Set xlwb = Nothing
Set xlApp = Nothing
Set tbl = Nothing

End Sub

Post's attachments

0031-2103-2-103-ТИ.ТМВ-060=308_03.rar 1.39 Мб, 4 скачиваний с 2019-04-16 

You don't have the permssions to download the attachments of this post.

6

Re: Выделение таблиц в составе контура автофигуры

не смогла посмотреть --не распаковывается
лучше выкладывать в ZIP  --надежнее в распаковке на других компах

7

Re: Выделение таблиц в составе контура автофигуры

При переносе таблиц курсор в какой-то момент начинает прыгать в зону ранее вставленных данных и вставка происходит не в конец документа. Как с этим бороться не знаю. Возможно макрос не верно определяет самую последнюю строку с данными

в этом и сложность подобных задач

8

Re: Выделение таблиц в составе контура автофигуры

shanemac51 пишет:

не смогла посмотреть --не распаковывается
лучше выкладывать в ZIP  --надежнее в распаковке на других компах

Готово! Ох уж этот рар. Пару слов о файле: Он видимо сгенерирован какой-то глумливой САПРовской утилитой в результате чего имеет на каждой странице шапку из смарт объектов (линии и шейпы с текстами) а ниже таблица в обычном виде. Изначально эти файлы мне пришли в формате rtf и весом более 50 мб. Сохранение в docx c  совместимостью дало самый маленький размер файла, но грузятся они по прежнему неприлично долго.

Post's attachments

0031-2103-2-103-ТИ.ТМВ-060=308_03.zip 1.72 Мб, 3 скачиваний с 2019-04-16 

You don't have the permssions to download the attachments of this post.

9

Re: Выделение таблиц в составе контура автофигуры

нашла пока ваш старый файл --вроде нормально ваш макрос работает

Post's attachments

trabl190416mm.zip 41.15 Кб, файл не был скачан. 

You don't have the permssions to download the attachments of this post.

10

Re: Выделение таблиц в составе контура автофигуры

shanemac51 пишет:

нашла пока ваш старый файл --вроде нормально ваш макрос работает

С маленькими ведомостями все гуд, отработало, а вот с большими нет.

11

Re: Выделение таблиц в составе контура автофигуры

andrewka пишет:
shanemac51 пишет:

нашла пока ваш старый файл --вроде нормально ваш макрос работает

С маленькими ведомостями все гуд, отработало, а вот с большими нет.

что есть, на том и пробовала
может в больших --есть какие то нюансы

пришлите на почту shanemac51@yandex.ru
после обеда посмотрю, если пришлете

12

Re: Выделение таблиц в составе контура автофигуры

shanemac51 пишет:
andrewka пишет:
shanemac51 пишет:

нашла пока ваш старый файл --вроде нормально ваш макрос работает

С маленькими ведомостями все гуд, отработало, а вот с большими нет.

что есть, на том и пробовала
может в больших --есть какие то нюансы

пришлите на почту shanemac51@yandex.ru
после обеда посмотрю, если пришлете

Так я ж выложил ZIP. Там в нем какраз тот крупный док с которым не получается подружиться.

13

Re: Выделение таблиц в составе контура автофигуры

zip у меня тоже не открылся

14

Re: Выделение таблиц в составе контура автофигуры

выложите на почту не -зипованном виде, только почта может не принять DOCM --ДАЙТЕ ДРУГОЕ РАСШИРЕНИЕ