Я видел ваш вопрос о переполнении стека, где он был действительно "слишком широким", как он сформулирован, но он заинтриговал меня.
Это можно сделать, хотя и не полностью автоматически, вручную и / или с помощью VBA.
- Выберите любой (пустой) абзац и примените к нему
Frame
. Команду « Insert Frame
можно найти на вкладке « Developer
» на ленте, в группе «Элементы управления», в старых элементах управления. Это четвертый элемент управления слева
- Размер рамки, примените размер шрифта, который вы хотите для чисел и т.д.
- Щелкните правой кнопкой мыши рамку, чтобы перейти в диалоговое окно "Формат рамки". Для горизонтального положения выберите
Outside
относительно страницы и при необходимости отрегулируйте расстояние от текста. Вертикальное положение должно быть 0 относительно абзаца. Убедитесь, что "Переместить с текстом" и "Блокировка привязки" активированы. Когда диалоговое окно подтверждено, рамочный абзац должен переместиться к внешнему полю непосредственно следующего абзаца.
- Создайте новый стиль из этого абзаца - он будет включать определение фрейма.
- Проверьте стиль, введя или выбрав другой пустой абзац и применив к нему стиль.
Нумерация может быть сгенерирована путем размещения поля SEQ в каждом кадре с последующим обновлением полей в документе.
На этом этапе вручную можно было бы сгенерировать нумерацию. Долгая задача, конечно, для большого документа. Следующий код будет циклически повторять все абзацы в документе, вставляя пустой абзац, поле SEQ и форматируя его со стилем. В конце все поля обновляются.
Это почти наверняка (основываясь на снимках экрана, которые вы показываете) вставит больше чисел, чем вы хотите. Вы можете либо пройти и удалить их вручную, либо изменить код, чтобы игнорировать абзацы, которые соответствуют определенным критериям, которые не должны быть пронумерованы, или изменить код, чтобы пропустить эти абзацы при создании фреймов.
В этом коде стиль для фреймов называется NrPara
; если вы используете другое имя, вам нужно изменить это.
Sub NumberParas()
Dim doc as Word.Document
Dim Para As Word.Paragraph
Dim rngPara As Word.Range, rngParas() As Word.Range
Dim numParas As Long, counterPara As Long
Dim numParaStyle As Word.style
Dim rngNumPara As Word.Range
Dim sSEQ As String
sSEQ = "SEQ ParaNum"
Set doc = ActiveDocument
numParas = doc.Paragraphs.Count
ReDim rngParas(numParas - 1)
'Get an array of the paragraph ranges
For counterPara = numParas To 1 Step -1
Set Para = doc.Paragraphs(counterPara)
Set rngPara = Para.Range
Set rngParas(counterPara - 1) = rngPara
Next
'Insert a paragraph above each existing one, format and insert SEQ field
For counterPara = LBound(rngParas) To UBound(rngParas)
Set rngPara = rngParas(counterPara)
With rngPara
.InsertBefore vbCr
.Collapse wdCollapseStart
.Fields.Add rngPara, wdFieldEmpty, sSEQ, False
rngPara.style = "NrPara"
End With
Next
doc.Fields.Update
End Sub