Как обработать таблицу с текстом?
Я захотел эту таблицу обрабатывать в верстке (чтобы не ковыряться с каждой ячейкой персонально - копируя и вставляя, копируя и вставляя... :( . Для этого собрался табличку "поколоночно" скопировать в новый пустой документ, разделяя текст каждой колонки любым символом-меткой (типа таким "Ў" или "!!!" - неважно). Потом из этого нового дока я просто все скопирую в буфер и уже из него будут вставлять сохраненный текст в верстку и там резать на колонки по меткам. Вот можно ли содержимое каждой колонки засунуть в какую-то переменную, которую потом просто распечатать в новом чистом доке?
Вот что я накропал:
Selection.Rows(1).Delete '[COLOR="DarkGreen"]"прибили шапку таблицы"[/COLOR]
For I = 1 To 4
ActiveDocument.Tables(1).Columns(I).Select
L(I) = Selection.Text
' Selection.Copy [COLOR="DarkGreen"]'копировать уже, видимо, ничего не надо[/COLOR]
Next
Documents.Add DocumentType:=wdNewBlankDocument
Selection.TypeText L(i) [COLOR="DarkGreen"]'тут пишется out of rnge[/COLOR]
а если написать L(1), то получаю содержимое первой ячейки первой колонки
Заодно вопрос. Почему в переменной L(i) сидит текст только первой ячейки? Значит надо делать двумерную переменную и обрабатывать каждую колонку в своем цикле (заполняя "порядно" сначала одну размерность, а потом вторую)?
Может быть переменные и вообще не нужны. Но с переменными вроде красивее.
Next <----- а почему тут конец цикла?
Documents.Add DocumentType:=wdNewBlankDocument
Selection.TypeText L(i)
И вообще, не ясна суть вопроса. Вам нужно скопировать содержимое столбцов таблицы и пораскидывать их по отдельным документам? Или надо в каждом новом документе не текст, а тот скопированный столбец?
имхо, буфер обмена использовать - это жесть.
[COLOR="DarkRed"]hghg lklkl popop popopo[/COLOR]
[COLOR="DarkOliveGreen"]sasasa lklk бьбь имим [/COLOR]
[COLOR="Teal"]trtr erer ненен гнгнг [/COLOR]
Должно получиться так:
[COLOR="DarkRed"]hghg [/COLOR][COLOR="DarkOliveGreen"]sasasa [/COLOR][COLOR="Teal"]trtr [/COLOR]--первая колонка
[COLOR="DarkRed"]lklkl [/COLOR][COLOR="DarkOliveGreen"]lklk [/COLOR][COLOR="DarkOliveGreen"][COLOR="Teal"]erer [/COLOR][/COLOR]--вторая
[COLOR="DarkRed"]popop [/COLOR][COLOR="DarkOliveGreen"]бьбь [/COLOR][COLOR="Teal"]ненен [/COLOR]--третья
[COLOR="DarkRed"]popopo [/COLOR][COLOR="DarkOliveGreen"]имим [/COLOR][COLOR="Teal"]гнгнг[/COLOR]--четвертая.
Только весь этот новый текст должен быть уже просто текстом, а не таблицей. Я его скопирую в буфер, а оттуда в верстку. А потом уже по меткам "конец колонки" рассую в соответствующие текстблоки.
А если просто копировать таблицу в буфер, то ее невозможно обрабатывать в верстке из-за табуляций. Т.е. текст оказывается разобранным по-рядно, а нужно по-колонно.
Еще короче. [COLOR="Navy"]Хотел, чтобы в новом пустом (временом) документе таблица бы оказалась разобранной по колонкам. Т.е. сначала текст из первой колонки, под ним текст из второй, под ним из третьей и в конце документа текст четвертой колонки.[/COLOR]
Можно ли что-то посоветовать?
Selection.EndKey Unit:=wdStory
Pos1 = Selection.START
For i = 1 To 4
ActiveDocument.Tables(1).Columns(i).Select
Selection.Copy
Selection.EndKey Unit:=wdStory
Selection.PasteAndFormat (wdFormatPlainText)
Selection.TypeText Text:="!!!"
Next
Selection.EndKey Unit:=wdStory
Pos2 = Selection.START
Set myRange = ActiveDocument.Range(START:=Pos1, End:=Pos2)
myRange.Copy 'заготовили буфер для обработки в верстке
End Sub
Не оч. красиво, но работает
ЗЫ. Dmitry2064, у вас, как всегда - много текста, но не очень понятна задача ;)
а что вы имеете ввиду под словом "верстка"? Разбивание на колонки? :)
Я понимаю, что почти все, что пытаюсь написать на VB выглядит позорно. Но на большее не хватает головы. А это хоть как-то, но работает. (машина довольно быстрая, поэтому логика кода не оч. критична).
А другой вариант с удовольствием посмотрел бы (если не оч. долго писать).
а что вы имеете ввиду под словом "верстка"? Разбивание на колонки? :)
Под версткой... ну в том числе и разбивание на колонки.
Дело в том, что текст таблицы, импортированый из Ворда в верстку, оказывается разбитым не в том порядке, в каком можно было бы эту таблицу восстановить (подкорректировать) в программе верстке. Если, например, ячейки таблицы в ворде содержат по одному слову, то можно просто в верстальной программе объявить позиции табуляций и табличка готова. Останется только начертить разделительные черточки.
А если в каждой ячейке вордовской таблицы много текста, то таблица погибает.
Чтобы было понятно, можно просто скопировать таблицу (именно с многострочными ячейками) в блокнот и увидеть, как она "ломается". Поэтому в верстку проще текст перекидывать поколонно. Тогда можно сразу задавать правую границу каждой колонки (в своем текстблоке) и таким образом повторить структуру вордовской таблицы (если понятно).