Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как обработать таблицу с текстом?

248
15 октября 2007 года
Dmitry2064
590 / / 06.12.2006
Вот есть банальная таблица из 4 колонок с переменным количеством рядов (чило рядов колеблется от 8 до 15, вобщем я не знаю, сколько там могут написать рядов, но видимо, не больше 15). Информация текстовая. В каждой ячейке 1-2 абзаца текста.
Я захотел эту таблицу обрабатывать в верстке (чтобы не ковыряться с каждой ячейкой персонально - копируя и вставляя, копируя и вставляя... :( . Для этого собрался табличку "поколоночно" скопировать в новый пустой документ, разделяя текст каждой колонки любым символом-меткой (типа таким "Ў" или "!!!" - неважно). Потом из этого нового дока я просто все скопирую в буфер и уже из него будут вставлять сохраненный текст в верстку и там резать на колонки по меткам. Вот можно ли содержимое каждой колонки засунуть в какую-то переменную, которую потом просто распечатать в новом чистом доке?
Вот что я накропал:
Код:
Dim L(4)
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) сидит текст только первой ячейки? Значит надо делать двумерную переменную и обрабатывать каждую колонку в своем цикле (заполняя "порядно" сначала одну размерность, а потом вторую)?
Может быть переменные и вообще не нужны. Но с переменными вроде красивее.
251
15 октября 2007 года
SkyMаn
1.7K / / 31.07.2007
Цитата:

Next <----- а почему тут конец цикла?
Documents.Add DocumentType:=wdNewBlankDocument
Selection.TypeText L(i)


И вообще, не ясна суть вопроса. Вам нужно скопировать содержимое столбцов таблицы и пораскидывать их по отдельным документам? Или надо в каждом новом документе не текст, а тот скопированный столбец?
имхо, буфер обмена использовать - это жесть.

248
17 октября 2007 года
Dmitry2064
590 / / 06.12.2006
Нужно таблицу подготовить для обработки в верстке. А в верстке она сидит в самостоятельных текстовых блоках, располагающихся в колонке 1, 2, 3, 4. Т.е. хотелось бы таблицу поклоночно скопировать в любой новый пустой Ворд-документ, так, что бы иметь метки разделения колонок. Потом все это в буфер, а потом уж в верстке я это разнесу по нужным блокам. Т.е. задача, что бы таблица обработалась так:
[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]
Можно ли что-то посоветовать?
248
17 октября 2007 года
Dmitry2064
590 / / 06.12.2006
Сделал вот так:
Код:
Sub TablReconstr()
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

Не оч. красиво, но работает
251
18 октября 2007 года
SkyMаn
1.7K / / 31.07.2007
Нндя.. В принципе в домашних условиях, закрывшись в комнате от посторонних глаз, можно использовать... Другие ответы актуальны?

ЗЫ. Dmitry2064, у вас, как всегда - много текста, но не очень понятна задача ;)
а что вы имеете ввиду под словом "верстка"? Разбивание на колонки? :)
248
22 октября 2007 года
Dmitry2064
590 / / 06.12.2006
Цитата: SkyM@n
Нндя.. В принципе в домашних условиях, закрывшись в комнате от посторонних глаз, можно использовать... Другие ответы актуальны?


Я понимаю, что почти все, что пытаюсь написать на VB выглядит позорно. Но на большее не хватает головы. А это хоть как-то, но работает. (машина довольно быстрая, поэтому логика кода не оч. критична).
А другой вариант с удовольствием посмотрел бы (если не оч. долго писать).

Цитата: SkyM@n
ЗЫ. Dmitry2064, у вас, как всегда - много текста, но не очень понятна задача ;)
а что вы имеете ввиду под словом "верстка"? Разбивание на колонки? :)



Под версткой... ну в том числе и разбивание на колонки.
Дело в том, что текст таблицы, импортированый из Ворда в верстку, оказывается разбитым не в том порядке, в каком можно было бы эту таблицу восстановить (подкорректировать) в программе верстке. Если, например, ячейки таблицы в ворде содержат по одному слову, то можно просто в верстальной программе объявить позиции табуляций и табличка готова. Останется только начертить разделительные черточки.
А если в каждой ячейке вордовской таблицы много текста, то таблица погибает.
Чтобы было понятно, можно просто скопировать таблицу (именно с многострочными ячейками) в блокнот и увидеть, как она "ломается". Поэтому в верстку проще текст перекидывать поколонно. Тогда можно сразу задавать правую границу каждой колонки (в своем текстблоке) и таким образом повторить структуру вордовской таблицы (если понятно).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог