Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2011, 16:13   #1
Елена Гох
Пользователь
 
Регистрация: 26.06.2010
Сообщений: 36
Злость Разбиение ячеек таблицы программно

Может быть кто-нибудь сталкивался с такой задачей и есть мысли по этому поводу: разбить ячейку таблицы с текстом на подячейки с помощью макроса. Разделители-символы столбцов и колонок задаются.Как я поняла, в Ворде нет понятия дочерней ячейки и при разбиении сразу вся нумерация летит к чертям, следовательно алгоритм усложняется невероятно...
Елена Гох вне форума Ответить с цитированием
Старый 25.01.2011, 16:57   #2
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от Елена Гох Посмотреть сообщение
...летит к чертям...
К чертям обычно проваливаются

Если есть таблица вида:
| текст, текст, текст | текст | текст |

А надо чтобы было:
| текст | текст | текст | текст | текст |

То можно использовать преобразование текст-таблица:
1. Преобразуем таблицу в текст
2. Заменяем запятые табуляцией
3. Преобразуем текст в таблицу
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 25.01.2011, 17:45   #3
Елена Гох
Пользователь
 
Регистрация: 26.06.2010
Сообщений: 36
По умолчанию

Спасибо за идею.
Елена Гох вне форума Ответить с цитированием
Старый 07.02.2011, 11:43   #4
Елена Гох
Пользователь
 
Регистрация: 26.06.2010
Сообщений: 36
По умолчанию

В реальной задаче в шаблон выгружаются из БД с столбцы по отношению один-ко-многим и в разных столбцах количество сток может быть разное. Для упрощения задачи остановились на фиксированном количестве столбцов. Предварительно в массивчики хитрым образом загружаются номера столбцов для расщепления и на сколько столбцов вправо будет растаскиваться текст.
Ну вот так примерно выглядит код для программного расщепления в WORD 2003 (три счётчика следят за циклом по строкам - обычный, на ссколько строк перепрыгнуть после расщепления и когда реально выйти, MAX_ARR - своя функция - считает максимум в масиве, TEXT2ARRAY разносит строку на двумерный массив - надыбана в Инете):

cnt_row = 100000
cnt_cln = otable.Columns.Count
cnt_ctl = otable.Rows.Count
CNOK = 1
CNOK_CTL = 0

For i = 6 To cnt_row
If CNOK_CTL > 0 Then
CNOK_CTL = CNOK_CTL - 1
GoTo NextStep
End If
For m = 1 To UBound(arcl)
j = arcl(m)
memo = otable.Cell(i, j).Range.Text
otable.Cell(i, j).Select
Arr_row = Split(memo, Chr(13))
arcnok(m) = UBound(Arr_row)
Next
CNOK = MAX_AR(arcnok)
cnt_ctl = cnt_ctl + CNOK - 1
CNOK_CTL = CNOK - 1
For j = arcl(1) To cnt_cln
cl_bl = False
For m = 1 To UBound(arcl)
If j = arcl(m) Then
cl_bl = True
Exit For
End If
Next
If cl_bl Then
memo = otable.Cell(i, j).Range.Text
Arr_row = Split(memo, Chr(13))
otable.Cell(i, j).Select
Selection.Delete
Set rng = ActiveDocument.Range(Start:=otable. Cell(i, j).Range.Start, End:=otable.Cell(i, j + arck(m) - 1).Range.End)
rng.Select
If CNOK >= 1 And Len(memo) > 2 Then
Selection.Cells.Split NumRows:=CNOK, NumColumns:=arck(m), MergeBeforeSplit:=True
arrs = Text2Array(memo, Chr(9), Chr(13))
For k = 1 To UBound(arrs, 1)
For l = 1 To UBound(arrs, 2)
otable.Cell(i + k - 1, j + l - 1).Range.Text = arrs(k, l)
Next
Next
End If
End If
Next
NextStep:
If i = cnt_ctl Then Exit For
Next
Елена Гох вне форума Ответить с цитированием
Старый 07.02.2011, 12:43   #5
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

а просто встать в ячейку и нажать кнопку разбить строк\столбцов....

не понимаю я ваших проблем
-пример входной таблицы
-пример выходной

я формирую подобные таблицы как НТМ из аксесса или экселя
можно и из ворда, но я не понимаю условий задачи
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание

Последний раз редактировалось shanemac51; 07.02.2011 в 12:45.
shanemac51 вне форума Ответить с цитированием
Старый 07.02.2011, 13:31   #6
Елена Гох
Пользователь
 
Регистрация: 26.06.2010
Сообщений: 36
По умолчанию

Это я уже решение поместила для тех, кому интересно. Задача как раз в том, чтобы всё сделал макрос автоматически, трудность 1 в том,что строки не бьются независимо друг от друга, потому ищется максимум, трудность 2 организовать счётчики (см. пост выше). У нас ещё в проге, написанной в 2000 году используется WORD 97, а там столбцы пляшут по другому сценарию, надо ещё счётчики по столбцам ставить и писать свою функцию SPLIT, но думаю эта древность уже никого не интересует. Разница между WORDами при расщеплении в том, что 2003 порождает сквозную нумерацию столбцов и нет первого, а в 97-м, наоборот, где расщепился, там в новой строке и первый. Если кому 97 интересен, пришлю личку, а засим вопрос закрываю.

Последний раз редактировалось Елена Гох; 07.02.2011 в 14:46.
Елена Гох вне форума Ответить с цитированием
Старый 23.03.2011, 13:06   #7
Елена Гох
Пользователь
 
Регистрация: 26.06.2010
Сообщений: 36
По умолчанию

Доброго времени суток, дорогие форумчане. Ещё раз спасибо всем откликнувшимся за участие. Для закрытия темы. Выложен файл с нумерацией разбиенных ячеек. Новые строки выделены белым цветом. Видно, что в Worde2003 сохраняется сквозная нумерация столбцов, а первые могут отсутствовать. И хоть Б.В.А. здесь http://citforum.ru/programming/vb/vba_word/8.shtml пишет, что работать программно с такой таблицей сложно, но это вполне возможно, надо только понять поведение. Можно написать и универсальный макрос, который по символам-разделителям будет дробить ячейку, чтобы не лазать по меню, надо только помнить, что независимо ячейки не бьются, и высчитать максимум по строке (см. выше мой код, примечание - для нашего случая мы задачу упростили, оставили фиксированное количество столбцов, в таблицу из базы выгружаются значения, разделенные разделителями и они разносятся по сторонам, ячейка разбивается на строки, если их нужно больше одной).
Вложения
Тип файла: doc SPLITtable.doc (54.5 Кб, 25 просмотров)

Последний раз редактировалось Елена Гох; 23.03.2011 в 17:18.
Елена Гох вне форума Ответить с цитированием
Старый 23.03.2011, 14:34   #8
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Или я не разобрался, или проблема надумана. Присоединяюсь к shanemac51, выложите образцы реальной таблицы "до" и "после".
Цитата:
Сообщение от Елена Гох Посмотреть сообщение
...в Ворде нет понятия дочерней ячейки...
Зато есть таблица в таблице. Т.е. можно не разбивать ячейку, а конвертировать текст ячейки в таблицу. Алгоритм заметно упростится. Для вложенных таблиц есть специальные свойства NestingLevel и TopLevelTables.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 23.03.2011, 17:41   #9
Елена Гох
Пользователь
 
Регистрация: 26.06.2010
Сообщений: 36
По умолчанию

Проблема не надумана. Это реальная задача, поставленная начальником. Последнее указание - зациклить на таблицы, чтобы можно не для одной было, в таблицу введена спецстрочка для разбиения, которая затем удаляется. Для любознательных выкладываю файлы до и после. Реальные файлы достигают до сотни страниц.

Последний раз редактировалось Елена Гох; 23.03.2011 в 18:06.
Елена Гох вне форума Ответить с цитированием
Старый 23.03.2011, 17:42   #10
Елена Гох
Пользователь
 
Регистрация: 26.06.2010
Сообщений: 36
По умолчанию

А вот и файлы.
Вложения
Тип файла: rar Акт.rar (11.7 Кб, 24 просмотров)
Елена Гох вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перестановка ячеек таблицы longfello Microsoft Office Excel 9 16.11.2010 15:54
поиск и заполнение ячеек таблицы Окоча Юра Microsoft Office Excel 2 16.01.2010 19:00
Форматирование таблицы в Excel программно monushka Помощь студентам 2 29.10.2009 11:03
Как программно обновить в BDE таблицы.... grenles БД в Delphi 4 26.03.2009 00:18
Программно связать таблицы Таня84 БД в Delphi 0 20.03.2007 18:43