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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2013, 12:17   #1
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию Как разнести текст по буквам в ячейки таблицы Word?

Приветствую всех!

Передо мной стоит задача: настроить подстановку данных из Excel в сложные шаблоны Word,
в частности, добиться автоматического (без макросов в шаблоне Word) разбиение текста по клеткам таблицы Excel.

В шаблоне Excel это делается просто (при помощи формул), и это я уже реализовал:
http://excelvba.ru/programmes/FillDo...eparateLetters






Вот теперь хочется сделать что-то аналогичное для Word
(например, чтобы при помощи полей Word, или как-то иначе,
подставленные моей программой в документ Word данные
автоматически разносились побуквенно по заданным ячейкам)


Скажите, такое вообще возможно?
Чтобы подставить значение из Excel в какую-то закладку или в DocVariables,
а Word потом при помощи полей (или как-то иначе) вывел отдельные буквы в клеточки таблиц.

(чтобы не прописывать в отдельные ячейки коды полей типа {ФИО-буква1} {ФИО-буква4}, и потом не делать программную замену для каждого такого поля)




------------------------------------
И ещё вопрос
(поскольку буду делать макрос для Word, подставляющий в выделенные ячейки таблиц в Word какие-то поля или коды)

Я выделил вручную ячейки в Word примерно так:



Задача - в цикле пройтись по всем выделенным ячейкам,
и проставить в них что-то (например, порядковый номер ячейки):




Делаю так:
Код:
Sub test()
    Debug.Print Selection.Cells.Count    ' возвращает 4

    Dim cel As cell
    For Each cel In Selection.Cells
        n = n + 1: cel.Range.Text = n
    Next cel
End Sub
НО - заполняются только последние 4 из выделенных ячеек:



Что я неправильно написал в коде?

Последний раз редактировалось EducatedFool; 22.02.2013 в 12:24.
EducatedFool вне форума Ответить с цитированием
Старый 22.02.2013, 12:27   #2
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Пункт 1

Все виды полей, какие есть в программе "Word", можно посмотреть здесь (Word 2010):
вкладка Вставка - группа Текст - Экспресс-блоки - Поле...

В программе "Word" нет поля, аналогичного Excel-функции "ПСТР".
Может быть и можно решить вашу задачу с помощью полей, но нужно сделать сложную манипуляцию.

Пункт 2

Цитата:
EducatedFool: Задача - в цикле пройтись по всем выделенным ячейкам
есть разные способы выделения ячеек в Word-таблице и VBA-Word по-разному себя ведёт.

Чтобы VBA обработал все выделенные ячейки, нужно выделять ячейки без клавиши "Ctrl". Если необходимо выделить с помощью клавиши "Ctrl", например, если нужно выделить несмежные ячейки, то тогда нужно что-то сделать, например, выделить текст в ячейках какой-нибудь редкой заливкой или использовать анимацию, а затем обработать выделенные таким способом ячейки. Редкую заливку и анимацию нужно использовать, т.к. в документе может быть уже использована какая-нибудь заливка или выделение цветом, а макросу нужно точно указать, текст с какой заливкой нас интересует. После работы макроса заливку или анимацию убираете.

При выделении ячеек в таблице, нужно ещё учитывать такую деталь, что если вы выделили заливкой символ "Конец ячейки" или "Конец строки" (точно не помню), то потом с помощью VBA-Word не всегда получается убрать эту заливку. Хоть визуально и не будет видно заливки, но макрос будет находить заливку. Что-то в этом роде, точно не помню.

Пункт 3

Цитата:
EducatedFool: чтобы не прописывать в отдельные ячейки коды полей типа {ФИО-буква1} {ФИО-буква4}
для того, чтобы с помощью макросов вставить данные в нужное место Word-документа, служат закладки. Пользователю работать с закладками не всегда удобно, а вот для работы с макросами закладки очень подходят.
Только нужно учитывать, что есть два вида закладок: в виде вертикальной черты и в виде двух квадратных скобок. И эти закладки ведут себя по-разному после вставки в закладки данных.

Можно вообще ничего не использовать, а вставлять данные прямо в ячейку Word-таблицы, т.к. каждая ячейка имеет адрес - номер строки и номер столбца.

Последний раз редактировалось Скрипт; 22.02.2013 в 13:40.
Скрипт вне форума Ответить с цитированием
Старый 22.02.2013, 12:57   #3
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Цитата:
добиться автоматического (без макросов в шаблоне Word) разбиение текста по клеткам таблицы Excel
хз

Цитата:
Задача - в цикле пройтись по всем выделенным ячейкам,
и проставить в них что-то (например, порядковый номер ячейки):
не проверял, но вот мысли на этот счет: выделение с ctrl? используй обход областей а-ля эксель areas

Цитата:
НО - заполняются только последние 4 из выделенных ячеек:
попробуй че-н-ть такое

Код:
For Each Table In Selection.Tables
    For Each Cell In Table.Range.Cells
        Cell.Range.Text = Cell.ColumnIndex
    Next
Next
Тишина – самый громкий звук

Последний раз редактировалось nerv; 22.02.2013 в 13:05.
nerv вне форума Ответить с цитированием
Старый 22.02.2013, 13:05   #4
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
...настроить подстановку данных из Excel в сложные шаблоны Word...разбиение текста..В шаблоне Excel это делается просто...
Если связывание отпадает, можно заполнить документ из Excel макросом типа "имена Excel в закладки Word". Раз уж в Excel все данные готовы, незачем грузить шаблон Word полями и др. Писал было такое.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 22.02.2013, 17:50   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Скрипт, спасибо огромное.
Узнал много нового.

При том, что VBA в Word реализовано куда лучше,
не думал, что такая простая манипуляция, как пройтись в цикле по выделенным несмежным ячейкам,
требует хитрых манипуляций с установкой\снятием доп.форматирования.

Цитата:
В программе "Word" нет поля, аналогичного Excel-функции "ПСТР"
Вот это я и хотел узнать.
Жаль, конечно. Придется искать другие варианты
(или, как раньше, рекомендовать заказчикам переводить эти шаблоны в Excel.


nerv, увы, вариант «попробуй че-н-ть такое» не подходит
Надо не во все ячейки таблицы проставить цифры, а только в выделенные (возможно, несмежные)
Цитата:
выделение с ctrl? используй обход областей а-ля эксель areas
хм... а оно есть? я искал - не нашел - потому и задал вопрос.
Про Areas из Excel - это была первая мысль. И про Intersect( selection, ...)
Увы, такого в ворде не нашел.


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


Главное, я теперь знаю, в каком направлении двигаться дальше.
Всем спасибо.
EducatedFool вне форума Ответить с цитированием
Старый 22.02.2013, 18:40   #6
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
...программно подставлять текст в такие закладки - это ж увеличит время работы программы...
Какой программы? У вас уже есть другое решение? Какое, если не секрет?

А нужна ли вам в документе Word таблица? Обычный текст можно оформить так, чтобы буквы были каждая в своей клетке, как у вас на рисунке. Тогда и со вставкой все намного проще.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 22.02.2013, 19:48   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Какой программы? У вас уже есть другое решение?
Я про свою надстройку для вставки данных из Excel в Word:
http://excelvba.ru/programmes/FillDocuments

Цитата:
Обычный текст можно оформить так, чтобы буквы были каждая в своей клетке, как у вас на рисунке
Можно, не спорю.
Это вы можете сделать, и я смогу сделать (если очень постараюсь)
А пользователи моей программы с этим не справятся
(они хотят нажать кнопку, и получить результат)

Поэтому я ищу простое и универсальное решение, которое можно в двух словах объяснить человеку, плохо знающему Word
EducatedFool вне форума Ответить с цитированием
Старый 22.02.2013, 19:55   #8
Скрипт
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 776
По умолчанию

Цитата:
EducatedFool: Поэтому я ищу простое и универсальное решение, которое можно в двух словах объяснить человеку, плохо знающему Word
программа "Word" очень сложная и чтобы хорошо знать программу "Word", нужно работать в ней каждый день. Поэтому нужно максимально просто сделать всё для пользователя.
Скрипт вне форума Ответить с цитированием
Старый 22.02.2013, 21:54   #9
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
...про свою надстройку...
Как я понимаю, если шаблон Word размечен под вашу надстройку, то использовать его по-другому (просто как шаблон для ручного ввода) не планируется, да и проблематично. Тогда зачем эти сложности с полями и закладками? Ничего проще и удобнее текстовых меток нет. Как для вас, так и для пользователя. Получается что-то типа htm/xml разметки. Вот и пришли к xml-схеме документа
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 22.02.2013, 23:07   #10
nerv
Форумчанин
 
Аватар для nerv
 
Регистрация: 26.04.2010
Сообщений: 450
По умолчанию

Цитата:
увы, вариант «попробуй че-н-ть такое» не подходит
Надо не во все ячейки таблицы проставить цифры, а только в выделенные (возможно, несмежные)
со смежным выделением приведенный мной код работает

Цитата:
программа "Word" очень сложная
программа ворд дебильная с точки зрения программиста

Цитата:
При выделении ячеек в таблице, нужно ещё учитывать такую деталь, что если вы выделили заливкой символ "Конец ячейки" или "Конец строки" (точно не помню), то потом с помощью VBA-Word не всегда получается убрать эту заливку. Хоть визуально и не будет видно заливки, но макрос будет находить заливку. Что-то в этом роде, точно не помню.
сталкивался с таким
Тишина – самый громкий звук
nerv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как разделить данные из одной ячейки и разнести их в разные, через обычные формулы Vasilev Microsoft Office Excel 15 24.09.2014 10:49
Из ячейки таблицы Microsoft Word в RichEdit OlegVE Общие вопросы Delphi 3 24.11.2010 13:54
Передвинуть текст внутри ячейки таблицы RamireZ HTML и CSS 4 14.09.2009 15:19
Помогите разнести текст ячейки по столбцам Vlad-S Microsoft Office Excel 4 14.08.2009 21:16
Как вычислять значения вне таблицы WORD, с использованием данных из таблицы WORD prikolist Microsoft Office Word 6 21.11.2008 13:17