Comments 15
Для внесения данных в шаблоны Word удобно использовать закладки.
Для внесения данных в шаблон Excel использую именованные диапазоны.
Если перед внесением данных проверять наличие закладки/именованного диапазона, то документ будет заполняться без ошибок. Изменение формата шаблона при этом ни на что не влияет. Закладку/именованный диапазон можно перенести в нужную часть нового шаблона.
Для внесения данных в шаблон Excel использую именованные диапазоны.
Если перед внесением данных проверять наличие закладки/именованного диапазона, то документ будет заполняться без ошибок. Изменение формата шаблона при этом ни на что не влияет. Закладку/именованный диапазон можно перенести в нужную часть нового шаблона.
Можно посмотреть Ваш пример реализации, если конечно это не является секретом? ;)
В Word создании шаблона создаются закладки. Выделяется, например заголовок в тексте, далее: «Вставка — Закладки». Указывается название закладки, например: «Title»
В проекте VB.NET после открытия шаблона указывается:
If wdDoc.Bookmarks.Exists(«Title») Then wdDoc.Bookmarks(«Title»).Range.Text = sValue
После этого, на месте месте закладки будет значение sValue
В Excel при создании шаблона указывается именованный диапазон. Выделяется нужная ячейка, ПКМ — присвоить имя. Указывается, например: Title.
В проекте VB.NET после открытия шаблона указывается:
xlBook.Range(«Title»).Value = sValue
После этого, в ячейке будет значение sValue
Прелесть указанных способов в том, что закладки и именованные диапазоны при переформатировании шаблона можно перемещать куда угодно и это не повлияет на заполнение документа данными.
В проекте VB.NET после открытия шаблона указывается:
If wdDoc.Bookmarks.Exists(«Title») Then wdDoc.Bookmarks(«Title»).Range.Text = sValue
После этого, на месте месте закладки будет значение sValue
В Excel при создании шаблона указывается именованный диапазон. Выделяется нужная ячейка, ПКМ — присвоить имя. Указывается, например: Title.
В проекте VB.NET после открытия шаблона указывается:
xlBook.Range(«Title»).Value = sValue
После этого, в ячейке будет значение sValue
Прелесть указанных способов в том, что закладки и именованные диапазоны при переформатировании шаблона можно перемещать куда угодно и это не повлияет на заполнение документа данными.
Правильно ли я понимаю, что в случае именованных диапазонов Один именованный диапазон (sValue) — одна ячейка данных? Есть ли ограничения у метода, т.е. как можно собирать в шаблоне строки из нескольких значений? Возможно ли использовать значение диапазонов в существующем тексте? Например как организовать итоговый вывод фразы содержащейся в одной ячейке: «Акт АОСР составлен в sValue экземплярах»?
Если не ошибаюсь, при присвоении имени диапазону ячеек, значение будет присваиваться только левой верхней ячейке. Если в Excel нужно вставить массив данных, то тут нужно смотреть — откуда берутся данные. Если, например, используется ADO, то у Recordset есть замечательный метод Range.CopyFromRecordset который вставляет результат выборки в нужное место листа.
Для присвоения строки из нескольких значений разумно в коде собрать саму строку, а потом — присвоить её ячейке.
По сути, эти вопросы не являются такими сложными как Вам кажется )
Для присвоения строки из нескольких значений разумно в коде собрать саму строку, а потом — присвоить её ячейке.
По сути, эти вопросы не являются такими сложными как Вам кажется )
я просто пытаюсь понять ограничения метода =) потому что когда составлял первоначальное ТЗ, то планировалась потенциальная возможность вставки текста куда угодно, отсюда у меня в выводе в формате Эксель перебор текстовых строк (в предыдущей статье приложен макрос с описаниями). С Вордом такой проблемы нет, потому что там достаточно расположить в нужном месте закладку и… все хорошо.
В принципе это не всегда актуально, а Ваш метод достаточно изящен. Если Вы не возражаете, что я опробую Ваш вариант для вывода в Эксель файл )
В принципе это не всегда актуально, а Ваш метод достаточно изящен. Если Вы не возражаете, что я опробую Ваш вариант для вывода в Эксель файл )
Вы не знаете, что такое именованные диапазоны? Да вы только в самом начале пути, вам предстоит еще много «открытий чудных». Потом научитесь делать из экселя клиент БД, рисовать формы, создавать кастомные панели с кастомными кнопками и подключать WinAPI. Вот тогда точно прослывете богом офисной автоматизации, а коллеги из бухгалтерии будут приносить вам в жертву девственниц и слагать гимны.
P. S. Не думайте, что это какая-то ирония или злой сарказм. Вышеперечисленное, при правильном применении, здорово облегчает жизнь, а в крупных компаниях целые департаменты начинают сражаться за доступ к вашемутелу мозгу. Проверено на собственном опыте.
P. P. S. Правда, вам с большой вероятностью очень скоро захочется большего, вы освоите какой-нибудь «взрослый» мейнстримный язык (а то и два-три), станете полноценным разработчиком, а офисную автоматизацию будете вспоминать субботними вечерами в кругу семьи и друзей.
P. P. P. S. Ах, да. Именованным диапазоном может быть любой диапазон. А «диапазон» — это, если грубо, любая комбинация ячеек, которую можно выделить одновременно (мышью с шифтом и контролом).
P. S. Не думайте, что это какая-то ирония или злой сарказм. Вышеперечисленное, при правильном применении, здорово облегчает жизнь, а в крупных компаниях целые департаменты начинают сражаться за доступ к вашему
P. P. S. Правда, вам с большой вероятностью очень скоро захочется большего, вы освоите какой-нибудь «взрослый» мейнстримный язык (а то и два-три), станете полноценным разработчиком, а офисную автоматизацию будете вспоминать субботними вечерами в кругу семьи и друзей.
P. P. P. S. Ах, да. Именованным диапазоном может быть любой диапазон. А «диапазон» — это, если грубо, любая комбинация ячеек, которую можно выделить одновременно (мышью с шифтом и контролом).
Нет, в самой программе именованные диапазоны присутствуют (я использую их для выпадающего списка, что на мой взгляд уменьшает шанс ошибки при повторном вводе, хотя функционал списка для длинных списков работает из рук вон плохо и не поддерживает прокрутку колесиком мышки), однако именно такая особенность их использования мне в голову не пришла — каюсь.
Добрый, старый, актуальный VB:)
Спасибо за статью, возьму на заметку.
Богата земля русская самородками ))
Есть такая же VB-шная штука, Blank-RZ, программист тоже из Нижнего Новгорода.
Есть такая же VB-шная штука, Blank-RZ, программист тоже из Нижнего Новгорода.
И да ) в свое время для исполнительной документации проекта IRKA, Нижегородская область, г.Кстово, я тоже делал систему исполнительной документации ) куча VB. Но там был немного другой принцип — база данных по всему проекту, от входа до выхода, из которого на каждую линию «выдергивалась» информация в виде уже исполниловки.
Каждый элемент на скриншоте — это выбираемый из базы или вычисляемый на ее основании текст или число.
Каждый элемент на скриншоте — это выбираемый из базы или вычисляемый на ее основании текст или число.
Лепо )
Здесь тонкий момент, дело в том что можно решать задачу «влоб» и дальше, вставив в книгу листы «БД для ...», можно закрывать по 100500 форм актов, однако меня сейчас занимает мысль — как бы сгруппировать это все, что бы составив рутинную методику кол-во ввода информации уменьшить, ведь чем больше вводить информации — тем больше вероятность ошибиться.
Здесь тонкий момент, дело в том что можно решать задачу «влоб» и дальше, вставив в книгу листы «БД для ...», можно закрывать по 100500 форм актов, однако меня сейчас занимает мысль — как бы сгруппировать это все, что бы составив рутинную методику кол-во ввода информации уменьшить, ведь чем больше вводить информации — тем больше вероятность ошибиться.
Так и было сгруппировано. Была единая база исходных данных, для удобства разбитая на несколько таблиц Excel (как это принято в реляционных базах данных), редактирование производилось в 90% случаев копипастом с последующим редактированием важных данных (например, стык угловой или прямой — это только человек может определить), и собственно все.
Потом вводится номер линии, нажимается одна кнопка и вжух — готова исполниловка так как это выше выглядит на эту линию.
Самое сложное тут было написать аналоги SQL-запросов на VBA, чтобы выборки тех или иных данных делались по нескольким критериям, тем самым исключая ручной труд по подбору к примеру сертификата вручную, если известен диаметр, класс, материал, толщина и тип стыка.
Потом вводится номер линии, нажимается одна кнопка и вжух — готова исполниловка так как это выше выглядит на эту линию.
Самое сложное тут было написать аналоги SQL-запросов на VBA, чтобы выборки тех или иных данных делались по нескольким критериям, тем самым исключая ручной труд по подбору к примеру сертификата вручную, если известен диаметр, класс, материал, толщина и тип стыка.
хм… а я уже на следующем уровне… от макросов отказался,
Apache POI — безопасно, быстро, ни Word ни Excel не нужен для генерации документов
но посколько переделывалось из генератора на макросах и надо было совместимость, то синтаксис шаблонов так же основан на именованных диапазонах в Excel и закладках в Word
Apache POI — безопасно, быстро, ни Word ни Excel не нужен для генерации документов
но посколько переделывалось из генератора на макросах и надо было совместимость, то синтаксис шаблонов так же основан на именованных диапазонах в Excel и закладках в Word
Sign up to leave a comment.
В продолжении темы автоматизации вывода файлов по шаблону. Excel