Чтение текста в таблице с объединенными ячейками

Мне нужно прочитать таблицу во входящих документах Word. Эти таблицы могут быть двух типов:

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

Но во втором случае мне нужно прочитать текст, содержащийся в ячейках с «Мин» и «Макс» (потому что иногда это «Макс|Мин»).

Мои вопросы:

  1. как распознать, какой тип стола там стоит; и
  2. как я могу прочитать содержимое ячеек, содержащих «Мин» и «Макс» на картинке?

Пожалуйста, задайте более конкретный вопрос, а также покажите, как это сделать the first row in both tables can be read without problems. Что вы пытаетесь сделать и что не работает? Я бы подумал, что ячейки, содержащие «Мин» и «Макс», находятся во второй строке, но поскольку таблица не симметрична, вам необходимо напрямую обращаться к отдельным ячейкам.

Olle Sjögren 08.08.2024 13:07
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
53
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам необходимо обращаться к отдельным ячейкам непосредственно в таблице с объединенными ячейками.

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

Option Explicit

Sub TableTest()
    Dim cellMin As String
    Dim cellMax As String
    
    cellMin = ThisDocument.Tables(2).Cell(2, 4).Range.Text
    cellMax = ThisDocument.Tables(2).Cell(2, 5).Range.Text
    
    MsgBox "The values are " & cellMin & " and " & cellMax & "!"
End Sub
Ответ принят как подходящий

«Как распознать, какой тип таблицы» на самом деле слишком общий вопрос.

Для конкретного примера, который вы показываете (с произвольным количеством строк), вы можете использовать что-то вроде следующего, чтобы различать их:

With ActiveDocument.Tables(1) ' or (2)
  If (.Rows.Count * .Columns.Count) = .Range.Cells.Count Then
    ' you have your first example
  Else
    ' you have your second example
  End If
End With

Или вы можете использовать что-то вроде этого, потому что в этом случае вы знаете, что ячейки (2,4) и ячейки (6) должны существовать.

With ActiveDocument.Tables(1) ' or (2)
  If .Cell(2,4).Range.Start = .Range.Cells(6).Start Then
    ' you have your second example
  Else
    ' you have your first example
  End If
End With

Убедившись, что это ваш второй пример, вы можете сделать что-то вроде

Dim MinColumn As Long
Dim MaxColumn As Long
Dim theRow As Long
With ActiveDocument.Tables(2)
  If UCase(Trim(.Cell(2,4).Range.Text)) = "MIN" then
    MinColumn = 4
  Else
    MinColumn = 5
  End If
  For theRow = 3 To .Rows.Count
    Debug.Print "Row " & CStr(theRow) & ", Min: " & .Cell(theRow,MinColumn).Range.Text  
  Next
End With

Другие вопросы по теме