1

Я долго искал ответ на этот вопрос, но безрезультатно, поэтому я надеюсь, что кто-то здесь сможет мне помочь.

Я недавно экспортировал документ из FineReader 12 в word. Документ представляет собой таблицу длиной 130 страниц. Таблица имеет правильную форму: 5 столбцов, без объединенных ячеек.

Однако, когда я объединяю отдельные таблицы (FineReader разбивает их по страницам) в одну, удаляя линии между ними, таблица приобретает неправильную форму на каждом соединении, например:

этот ,

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

Я попытался сбросить ширину таблицы и столбца, перенос текста и т.д .; Я также выбрал всю таблицу и проверил, затем снял галочку "заголовок таблицы" для всех.

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

1 ответ1

0

Хорошо, я получил ответ Пола Эдштейна, также известного как макропод на форумах MS Office, который я немного изменил, и теперь он работает как шарм. Я вставляю решение здесь, поскольку это может сэкономить десятки часов работы для любого, кто работает с OCR и еще много чего.

Идея состоит в том, чтобы сделать макрос, который переформатирует макет каждой таблицы (и каждой ячейки, если необходимо), например:

Sub FixTables()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim Tbl As Table, i As Long
With ActiveDocument
    For Each Tbl In .Tables
        With Tbl
            With .Rows
                .LeftIndent = 0
                .WrapAroundText = False
                .Alignment = wdAlignRowCenter
            End With
            .TopPadding = 0
            .LeftPadding = 0
            .RightPadding = 0
            .BottomPadding = 0
            .AllowAutoFit = False
            .PreferredWidthType = wdPreferredWidthAuto
            If .Uniform Then
                .Columns(1).Width = CentimetersToPoints(1#)
                .Columns(2).Width = CentimetersToPoints(3.75)
                .Columns(3).Width = CentimetersToPoints(3.75)
                .Columns(4).Width = CentimetersToPoints(3.75)
                .Columns(5).Width = CentimetersToPoints(3.75)
            Else
                For i = 1 To .Range.Cells.Count
                    Select Case (i - 1 Mod 5) + 1
                        Case 1: .Range.Cells(i).Width = CentimetersToPoints(1#)
                        Case Else: .Range.Cells(i).Width = CentimetersToPoints(3.75)
                    End Select
                Next
            End If
    End With
    While .Tables.Count > 1
        .Tables(1).Range.Characters.Last.Next.Delete
    Wend
Next
End With
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Единственным недостатком является то, что, хотя он выполняется всего за пару секунд только с 3 таблицами, для внесения изменений в набор из 50 таблиц потребовалось около 15 минут. Это включает в себя временное отключение обновления экрана в слове и подавление всех предупреждений (в противном случае он будет запрашивать сохранение изменений каждый раз, когда Word не хватает ОЗУ).

Обратите внимание, что это решение адаптировано только для 5 столбцов, поэтому настройте его соответствующим образом!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .