1

Тема: Тегирование строк Word

Товарищи, может кто-то подбросит идейку о том, как можно разметить строки в Word вне текста. Суть в том, что нужно каждой строке дать порядковый номер (Под строкой понимаю здесь набор символов, умещающийся по горизонтали на листе ворд без перехода на новую строку. Это может быть как абзац, так и часть абзаца) и его где-то записать. На ум пришли следующие идеи:
1) Использовать дополнительные свойства документа (пока не поэкспериментировал с их максимальным количеством), но среднее количество строк в документах - 5000 (документы бывают в 200 страниц)
2) Использовать закладки (тут явно попроще и по добавлению и по считыванию)
3) Использовать примечания. Эта идея мне не очень нравится, но не отказываюсь пока.

Пока в голову ничего больше не лезет. Хотелось бы рассмотреть все возможные варианты и потому хотелось бы услышать другие идеи.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

2

Re: Тегирование строк Word

не поняла, в чем суть номеров
---
возможно
--набивала бы текст в ексель/аксесс(код, сортировка, номер,текст)
--программно создавала НТМ ,хотя в минимальном объеме тегов(30-30)

полученный документ можно смотреть в НТМ или ВОРД

3

Re: Тегирование строк Word

shanemac51 пишет:

не поняла, в чем суть номеров
---
возможно
--набивала бы текст в ексель/аксесс(код, сортировка, номер,текст)
--программно создавала НТМ ,хотя в минимальном объеме тегов(30-30)

полученный документ можно смотреть в НТМ или ВОРД

Суть в том, что каждая строка должна быть отмечена каким-то образом (не в тексте) В дальнейшем номера будут использоваться в базе и связаны со строками

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

4

Re: Тегирование строк Word

Fck_This пишет:

. . .
Под строкой понимаю здесь набор символов, умещающийся по горизонтали на листе ворд без перехода на новую строку. Это может быть как абзац, так и часть абзаца) и его где-то записать. На ум пришли следующие идеи:
1) Использовать дополнительные свойства документа (пока не поэкспериментировал с их максимальным количеством), но среднее количество строк в документах - 5000 (документы бывают в 200 страниц)
2) Использовать закладки (тут явно попроще и по добавлению и по считыванию)
3) Использовать примечания. Эта идея мне не очень нравится, но не отказываюсь пока.
. . .

Кроме закладок и свойств, можно еще предложить так называемые переменные Word (ActveDocument.Variables). Они могут сохраняться вместе с документом. Создать их можно только через макрос. Можно было бы переменные для строк назвать типа Line00001,  Line00001... и т.д., а значения - это символы соответствующих строк.
Чтобы двигаться по строкам, надо организовать цикл по абзацам, а внутри них действовать так:
1. Запомнить Selection.range.Start (как начало диапазона первой строки)
2. Выполнить Selection.GoTo What:=wdGoToLine, Which:=wdGoToNext, count:=1
3. Запомнить Selection.Range.Start -1  (как конец диапазона первой строки)
4. Из найденного диапазона выделяются символы строки (.Text), но вы можете в очередной переменной документа хранить как значение строки, так и границы диапазона, напр. в виде строки:
           |000045|000083|
это пример значения строковой переменной, содержащей позиции начала и конца диапазона строки. Потом такое значение легко разобрать макросом извлечения значения строки.
5. Далее выполнять шаги 1-3 пока конец диапазона очередной строки не превысит конец диапазона текущего абзаца.
6. И так далее по всем абзацам.
Потом для извлечения строк нужно написать отдельный несложный макрос.
Недостаток этого метода - нужно проводить пересоздание переменных, связанных со строками при любом изменении текста в документе.

5

Re: Тегирование строк Word

Спасибо за идею с Variables. По выделению строк я уже подготовил макрос. Почитаю про этого зверя и определюсь.

Спасибо можно перевести на WebMoney-кошелёк R378231864568 или на Яндекс-деньги 410015093172871

6

Re: Тегирование строк Word

Fck_This пишет:

Спасибо за идею с Variables. По выделению строк я уже подготовил макрос. Почитаю про этого зверя и определюсь.

Сам я пользуюсь такими подпрограммами (далее подпрограммы записи и чтения Variables  и проверка этих подпрограмм). Если переменной с указанным именем нет, то функция GetDocVariable возвращает значение пустой строки.

Public Function GetDocVariable(varname) As String
'Get value from a document variable
Dim dv As String
dv = ""
On Error Resume Next
dv = ActiveDocument.Variables(varname).Value
On Error GoTo 0
GetDocVariable = dv
End Function

Public Sub SetDocVariable(varname, varvalue)
'Set value to a document variable
On Error Resume Next
ActiveDocument.Variables(varname).Delete
ActiveDocument.Variables.Add Name:=varname, Value:=varvalue
On Error GoTo 0
End Sub

Sub test_doc_variable()
Dim vv as String
SetDocVariable "BD", "4"
vv = GetDocVariable("BD")
End Sub

7

Re: Тегирование строк Word

А может быть так?

Sub Line_Numbering()
'
    With ActiveDocument.PageSetup
        With .LineNumbering
            .Active = True
            .StartingNumber = 1
            .CountBy = 1
            .RestartMode = wdRestartContinuous
            .DistanceFromText = wdAutoPosition
        End With
    End With
End Sub