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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2010, 03:05   #11
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

... Продолжение
Можно решать с помощью описываемого подхода такие часто встречающиеся задачи как размещение части текста из переменной в
ячейке таблицы в одну строку с переносом остатка в следующие (возможно несмежные) ячейки.
Или генерировать на основании данных Excel специальным полем различные типы пометок (квадрат с галочкой, квадрат с андреевским крестом, radio button, условный текст со сложным выбором (стандартное поле IF затрудняет задание сложных условий ) и т.д. и т.п.

У меня несколько лет назад по указанной технологии был построен генератор очень cложно структурированных документов для операторов рынка ценных бумаг и юристов. Причём описанный подход позволяет построить визуальный конструктор шаблонов - когда конечный пользователь, создавая шаблон, работает с формой представляющей пользовательскую объектную модель предметной области.

Очень полезной оказалась возможность генерации ключевых слов с автоматическим размещением их в свойствах документа.

Замечу, что если вы используете при генерации стандартные поля IF WORD очень важно помнить, что к сожалению WORD воспринимает фигурные кавычки « » как обычные. И если их не квотировать бэкслэшем то при подстановке влложенных
полей вероятны ошибки. Эта проблема часто возникает с названиями организаций.

Важно, что подход с использованием пользовательских полей позволяет использовать в качестве модификаторов передаваемых данных пользовательские функции VBA проекта и тем самым разрешить самое узкое место в механизме полей WORD - отсутствие
нормального механизма работы со строками.
Скажем легко интерпретируются конструкции вида {ADDIN ДОГОВОР /S]"№":]} -Выделение из значения переменной договор подстроки c символа следующего за строкой "№" или да же
{ADDIN ПЕРЕДАТОЧНОЕ_РАСПОРЯЖЕНИЕ.ОСНОВАНИЕ _ДЕЙСТВИЙ}.
Здесь ОСНОВАНИЕ_ДЕЙСТВИЙ это написанная на VBA функция, обрабатывающая сложный объект ПЕРЕДАТОЧНОЕ_РАСПОРЯЖЕНИЕ и извлекающая из дополнительной таблицы на основании данных ПЕРЕДАТОЧНОГО_РАСПОРЯЖЕНИЯ информацию об основании действий.

Напоследок, поделюсь ещё одним know how
Часто в шаблоне документа помимо ФИО присутствуют фрагменты зависящие от пола физического лица
"проживающе(го|й) по адресу". Многие организации требуют что бы в документе скобки были раскрыты, т.е. стояли правильные окончания в соответствии с родом. В этом случае свойство .CODE для соответствующего поля ADDIN может быть например вида
ADDIN ДОВЕРЕННОЕ_ЛИЦО.ФИО.ПОЛ а свойство .RESULT = "(го|й)" Так как сразу установить .result для полей такого типа
нельзя - сначала конструктором полей создаётся поле типа QUOTE а затем для этого поля меняется код. Генератор документа,
обрабатывая поле в этом случае меняет его тип и значение. Такая схема оказалась более удобной чем использование условного
поля. {ADDIN IF ДОВЕРЕННОЕ_ЛИЦО.ФИО.ПОЛ "го" "й"}. Хотя и это возможно.

Клиенты иногда выдвигают специфические требования. Но при подходе с интерпретатором пользовательских полей их довольно легко реализовать. Например, один из моих клиентов был не удовлетворён описанным выше подходом к формированию окончаний
и попросил сделать линковку по цвету. Т.е одним цветом в шаблоне документа маркировались полная форма ФИО и блоки
окончаний в модифицируемых словах, относящихся к этому ФИО.

Или однажды пришлось столкнуться с очень сложной объектной моделью предметной области с несколькими сотнями полей.
Причём в каждом шаблоне использовалось очень ограниченное подмножество. Было найдено следующее решение:
Конструктор шаблона при сохранении шаблона записывал список необходимых компонентов пользовательской объектной модели в пользовательское свойство документа.
А Excel в свою очередь перед тем как передавать параметры просматривал этот список. Пользовательское свойство было выбрано вместо переменной Word для того что бы была возможность прочитать список без открытия документа и отобразить
некоторые объекты динамически создаваемыми для данного шаблона чекбоксами на пользовательской форме.

Буду рад ответить на дополнительные вопросы если они возникнут.

Последний раз редактировалось Aent; 01.03.2010 в 04:55.
Aent вне форума Ответить с цитированием
Старый 07.03.2010, 12:12   #12
siimao
Пользователь
 
Регистрация: 28.02.2010
Сообщений: 11
По умолчанию

Спасибо, всем. Узнал много полезного и уяснил для себя, что напрямую из Excel создавать шаблон документа Word нельзя!
Представим себе такую ситуацию: расчет ведется в таблице Excel, а результаты вносятся в Word. Но!!! мне очень хотелось передать одному человеку не два документа (1. Excel, где производятся расчеты, который открывает заранее подготовленную книгу Word и вставляет необходимые данные в Word; 2. Word, шаблон письма-документа с заранее набранным текстом, где применена много уровневая нумерация и вставлены закладки), а один (Excel, который бы мог осуществлять заготовку документа Word за него самого).

Последний раз редактировалось siimao; 07.03.2010 в 13:58.
siimao вне форума Ответить с цитированием
Старый 07.03.2010, 17:12   #13
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Похоже что к сожалению уяснили вы мало.
Динамически создать документ Word из Excel без дополнительных шаблонов
(не считая присутствующий в системе normal.dot) можно (но не нужно).
Если ваша прихоть состоит именно в передаче одного документа - это
можно реализовать. Но естественно за ваши деньги.
Aent вне форума Ответить с цитированием
Старый 07.03.2010, 18:15   #14
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

siimao, вы не верно понимаете, что такое шаблон. Если вы хотите передавать пользователю только один файл Excel, то это сделает ваш "шаблон" очень негибким. Любое изменение форматирования, даже не затрагивающее содержимого, потребует внесения изменений в код. Не говоря уже о трудоёмкости создания такого макроса. Хотя он, конечно, возможен, но как и всякая трудоёмкая работа потребует капиталовложений.
Aent, а что это за поле ADDIN? Что-то я о таком не слышал.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 07.03.2010, 18:45   #15
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

viter.alex, Есть такое поле. Изначально использовалось для связи Word c различными не очень популярными математическими и географическими пакетами или, например, с EndNote.
В HELP по объектной модели упоминается в связи с Data Property для Field.
Cм. так же: http://word.mvps.org/FAQs/TblsFldsFms/AddinFields.htm
В принципе, можно создавать вообще не типизированные поля типа {НДС} (Фигурные скобки естественно вставлены по Ctrl-F9)
Но это приведёт к ошибкам в некоторых случаях. Например, при вставке текста, содержащего подобные поля с помощью поля INCLUDETEXT.

Последний раз редактировалось Aent; 08.03.2010 в 01:05.
Aent вне форума Ответить с цитированием
Старый 07.03.2010, 18:54   #16
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Кстати, сейчас придумал пару извращений:
1) Можно поместить шаблон документа Word (в несколько рекодированном естественно виде) на скрытый лист рабочей книги - построчно.
2) Можно поместить шаблон документа на скрытый лист как объект.
Затем сохранять его и далее по стандартной схеме
Aent вне форума Ответить с цитированием
Старый 14.03.2010, 01:51   #17
siimao
Пользователь
 
Регистрация: 28.02.2010
Сообщений: 11
По умолчанию

Aent, спасибо за идею.

Sheets("Лист1").Shapes("1").Select
Selection.Verb Verb:=xlPrimary
Selection.Copy
Set oword = CreateObject("word.application")
Set odoc = oword.Documents.Add()
With oword
.Selection.Paste

Вставляет в Word тоже как объект, а нужно само содержание. Подскажи, пожалуйста, что еще нужно добавить или удавить?
Спасибо.
siimao вне форума Ответить с цитированием
Старый 18.09.2010, 16:44   #18
pooli
Пользователь
 
Регистрация: 04.09.2010
Сообщений: 45
По умолчанию

Скажите как организовать поиск и замену значений в WORD из под EXCEL?
требуется найти абзацы в ворде и заменить их на пробелы
вот код записи вордом

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFor matting

With Selection.Find
.Text = "^p"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Visible = True
End With
Selection.Find.Execute Replace:=wdReplaceAll


но в экселе не работает!
требуется из ексель открыть документ ворд,убрать абзацы,скопировать данные и вставить их в ексель.
по поводу вставки данных проблем нет, но вот поиск и замена не получается.
pooli вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запуск макроса serafim09 Microsoft Office Excel 9 03.09.2009 16:55
Копирование таблиц из Excel в Word с помощью макроса Kostaen Microsoft Office Word 3 25.08.2009 05:00
Запуск макроса в Excel из программы на C# AnnNet Общие вопросы .NET 1 05.06.2009 16:23
Запуск макроса с параметрами из другого макроса Saladin Microsoft Office Excel 2 19.01.2009 09:43
Как создать новый файл Word из макроса Excel? Dorvir Microsoft Office Excel 12 08.07.2008 16:50