![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 26.06.2010
Сообщений: 36
|
![]()
Может быть кто-нибудь сталкивался с такой задачей и есть мысли по этому поводу: разбить ячейку таблицы с текстом на подячейки с помощью макроса. Разделители-символы столбцов и колонок задаются.Как я поняла, в Ворде нет понятия дочерней ячейки и при разбиении сразу вся нумерация летит к чертям, следовательно алгоритм усложняется невероятно...
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 29.09.2008
Сообщений: 378
|
![]()
К чертям обычно проваливаются
![]() Если есть таблица вида: | текст, текст, текст | текст | текст | А надо чтобы было: | текст | текст | текст | текст | текст | То можно использовать преобразование текст-таблица: 1. Преобразуем таблицу в текст 2. Заменяем запятые табуляцией 3. Преобразуем текст в таблицу
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 26.06.2010
Сообщений: 36
|
![]()
Спасибо за идею.
|
![]() |
![]() |
![]() |
#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 |
![]() |
![]() |
![]() |
#5 |
Участник клуба
Регистрация: 12.08.2010
Сообщений: 1,079
|
![]()
а просто встать в ячейку и нажать кнопку разбить строк\столбцов....
не понимаю я ваших проблем -пример входной таблицы -пример выходной я формирую подобные таблицы как НТМ из аксесса или экселя можно и из ворда, но я не понимаю условий задачи
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание Последний раз редактировалось shanemac51; 07.02.2011 в 12:45. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 26.06.2010
Сообщений: 36
|
![]()
Это я уже решение поместила для тех, кому интересно. Задача как раз в том, чтобы всё сделал макрос автоматически, трудность 1 в том,что строки не бьются независимо друг от друга, потому ищется максимум, трудность 2 организовать счётчики (см. пост выше). У нас ещё в проге, написанной в 2000 году используется WORD 97, а там столбцы пляшут по другому сценарию, надо ещё счётчики по столбцам ставить и писать свою функцию SPLIT, но думаю эта древность уже никого не интересует. Разница между WORDами при расщеплении в том, что 2003 порождает сквозную нумерацию столбцов и нет первого, а в 97-м, наоборот, где расщепился, там в новой строке и первый. Если кому 97 интересен, пришлю личку, а засим вопрос закрываю.
Последний раз редактировалось Елена Гох; 07.02.2011 в 14:46. |
![]() |
![]() |
![]() |
#7 |
Пользователь
Регистрация: 26.06.2010
Сообщений: 36
|
![]()
Доброго времени суток, дорогие форумчане. Ещё раз спасибо всем откликнувшимся за участие. Для закрытия темы. Выложен файл с нумерацией разбиенных ячеек. Новые строки выделены белым цветом. Видно, что в Worde2003 сохраняется сквозная нумерация столбцов, а первые могут отсутствовать. И хоть Б.В.А. здесь http://citforum.ru/programming/vb/vba_word/8.shtml пишет, что работать программно с такой таблицей сложно, но это вполне возможно, надо только понять поведение. Можно написать и универсальный макрос, который по символам-разделителям будет дробить ячейку, чтобы не лазать по меню, надо только помнить, что независимо ячейки не бьются, и высчитать максимум по строке (см. выше мой код, примечание - для нашего случая мы задачу упростили, оставили фиксированное количество столбцов, в таблицу из базы выгружаются значения, разделенные разделителями и они разносятся по сторонам, ячейка разбивается на строки, если их нужно больше одной).
Последний раз редактировалось Елена Гох; 23.03.2011 в 17:18. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 29.09.2008
Сообщений: 378
|
![]()
Или я не разобрался, или проблема надумана. Присоединяюсь к shanemac51, выложите образцы реальной таблицы "до" и "после".
Зато есть таблица в таблице. Т.е. можно не разбивать ячейку, а конвертировать текст ячейки в таблицу. Алгоритм заметно упростится. Для вложенных таблиц есть специальные свойства NestingLevel и TopLevelTables.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
|
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 26.06.2010
Сообщений: 36
|
![]()
Проблема не надумана. Это реальная задача, поставленная начальником. Последнее указание - зациклить на таблицы, чтобы можно не для одной было, в таблицу введена спецстрочка для разбиения, которая затем удаляется. Для любознательных выкладываю файлы до и после. Реальные файлы достигают до сотни страниц.
Последний раз редактировалось Елена Гох; 23.03.2011 в 18:06. |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 26.06.2010
Сообщений: 36
|
![]()
А вот и файлы.
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перестановка ячеек таблицы | 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 |