|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.03.2010, 03:05 | #11 |
Форумчанин
Регистрация: 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. |
07.03.2010, 12:12 | #12 |
Пользователь
Регистрация: 28.02.2010
Сообщений: 11
|
Спасибо, всем. Узнал много полезного и уяснил для себя, что напрямую из Excel создавать шаблон документа Word нельзя!
Представим себе такую ситуацию: расчет ведется в таблице Excel, а результаты вносятся в Word. Но!!! мне очень хотелось передать одному человеку не два документа (1. Excel, где производятся расчеты, который открывает заранее подготовленную книгу Word и вставляет необходимые данные в Word; 2. Word, шаблон письма-документа с заранее набранным текстом, где применена много уровневая нумерация и вставлены закладки), а один (Excel, который бы мог осуществлять заготовку документа Word за него самого). Последний раз редактировалось siimao; 07.03.2010 в 13:58. |
07.03.2010, 17:12 | #13 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
Похоже что к сожалению уяснили вы мало.
Динамически создать документ Word из Excel без дополнительных шаблонов (не считая присутствующий в системе normal.dot) можно (но не нужно). Если ваша прихоть состоит именно в передаче одного документа - это можно реализовать. Но естественно за ваши деньги. |
07.03.2010, 18:15 | #14 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
siimao, вы не верно понимаете, что такое шаблон. Если вы хотите передавать пользователю только один файл Excel, то это сделает ваш "шаблон" очень негибким. Любое изменение форматирования, даже не затрагивающее содержимого, потребует внесения изменений в код. Не говоря уже о трудоёмкости создания такого макроса. Хотя он, конечно, возможен, но как и всякая трудоёмкая работа потребует капиталовложений.
Aent, а что это за поле ADDIN? Что-то я о таком не слышал.
Лучше день потерять — потом за пять минут долететь!©
|
07.03.2010, 18:45 | #15 |
Форумчанин
Регистрация: 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. |
07.03.2010, 18:54 | #16 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
Кстати, сейчас придумал пару извращений:
1) Можно поместить шаблон документа Word (в несколько рекодированном естественно виде) на скрытый лист рабочей книги - построчно. 2) Можно поместить шаблон документа на скрытый лист как объект. Затем сохранять его и далее по стандартной схеме |
14.03.2010, 01:51 | #17 |
Пользователь
Регистрация: 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 тоже как объект, а нужно само содержание. Подскажи, пожалуйста, что еще нужно добавить или удавить? Спасибо. |
18.09.2010, 16:44 | #18 |
Пользователь
Регистрация: 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 но в экселе не работает! требуется из ексель открыть документ ворд,убрать абзацы,скопировать данные и вставить их в ексель. по поводу вставки данных проблем нет, но вот поиск и замена не получается. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Запуск макроса | 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 |