Исправить неправильную форму объединенных таблиц в MS Word 2007
Я долго искал ответ на этот вопрос, но безрезультатно, поэтому я надеюсь, что кто-то здесь сможет мне помочь.
Я недавно экспортировал документ из FineReader 12 в word. Документ представляет собой таблицу длиной в 130 страниц. Таблица имеет правильную форму: 5 столбцов, без объединенных ячеек.
Однако, когда я объединяю отдельные таблицы (FineReader разбивает их по страницам) в одну, удаляя линии между ними, таблица приобретает неправильную форму на каждом соединении, например:
,
Учитывая огромное количество таблиц, которые у меня есть, есть ли способ полностью изменить их форму? До сих пор кажется, что я должен вручную настроить столбцы каждой таблицы, чтобы соответствовать другим.
Я попытался сбросить ширину таблицы и столбца, перенос текста и т.д.; Я также выбрал всю таблицу и проверил, затем снял отметку "заголовок таблицы" для всех.
Преобразование таблицы в текст и обратно не работает, потому что в некоторых ячейках есть разрывы абзацев, и об этом мы поговорим позже.
1 ответ
Хорошо, я получил ответ Пола Эдштейна, также известного как макропод на форумах 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 столбцов, поэтому настройте его соответствующим образом!