Импорт таблицы слов из указанного раздела c в Excel - PullRequest
0 голосов
/ 07 января 2020

Я создаю инструмент Excel, который копирует таблицу из раздела C .1 документа word и вставляет его в указанный лист в файле Excel.

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

Иногда таблица в разделе C .1 содержится на одной странице, но иногда она разбивается и выливается на следующую страницу.

Попытка использовать метод подсчета / нумерации таблиц здесь действительно нецелесообразна, поскольку число таблиц в файле слов само по себе нередко и часто меняется и номер таблицы представляющей интерес таблицы, но номер раздела никогда не меняется .

Как я могу сказать VBA go разделу C .1 и скопировать таблицу на указанный лист в моем файле Excel?

1 Ответ

0 голосов
/ 07 января 2020

Я активно пытался решить эту проблему, так как я почти исключительно работал в Word VBA с большим количеством таблиц. Есть несколько способов решить эту проблему.

Самый простой - Закладки

Если у вас есть доступ и разрешение на изменение исходного документа, я бы просто добавил закладку в нужную таблицу или в нужный раздел Заголовок и / или заголовок. Затем вы можете сделать что-то вроде:

Dim thisTbl as Range
Set thisTbl = ActiveDocument.GoTo(what:=wdGoToBookmark, Name:="bookmark").Tables(1).Range

или

Dim thisTbl as Range
Set thisTbl = ActiveDocument.GoTo(what:=wdGoToBookmark, Name:="bookmark").Paragraphs(1).Range
Set thisTbl = thisTbl.GoTo(what:=wdGoToTable, which:=wdGoToNext).Tables(1).Range

Второй самый простой

Определить слово или фразу, которая задает c для этой таблицы и / или заголовок раздела и / или заголовок. Затем определите диапазон, выполните поиск по документу и установите диапазон, равный Find результатам. Затем измените диапазон, как упомянуто выше, чтобы он выглядел примерно так:

Dim thisTbl as Range
Set thisTbl = ActiveDocument.Content

With thisTbl.Find
    .ClearFormatting
    .Text = "Specific to the table/header"
    .Wrap = wdFindStop
    .Execute 
    'If your find criteria is specific to the table, stop here. Otherwise, execute the following to move down a table: 
    If .Found = True Then
       Set thisTbl = thisTbl.GoTo(what:=wdGoToTable, which:=wdGoToNext).Tables(1).Range
    End If

End With

Для меня это звучит так: «C .1» - это фраза, которую вы должны искать, если можете: установить закладку.

Что касается перетекания, это не должно иметь значения, если вы устанавливаете диапазон, если таблица не разбита с wdColumnBreak. Если это так, я предлагаю добавить чек для Range.Information.

Импорт в Excel

Есть много хороших руководств о том, как это сделать. Самый простой способ - просто использовать Range.Copy внутри Word и .Paste внутри Excel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...