Вопрос: Использование шаблонов Word | Добавлено: 01.07.08 13:38 |
Автор вопроса: ![]() |
Здесь мне уже Smith и Winand помогли по Winwordу.
А теперь тут же рядом еще задумка у меня появилась. Мне надо выводить отчеты в ворд, в принципе можно создать шаблон. Как туда из VB вставлять значения? И как создавать вордовский файл по определенному шаблону и очень важно - чтобы пользователь не записал случайно вых.файл в имеющийся шаблон!! Я понимаю, что становлюсь уже наверно неприятной как собеседник, но я не программист, просто бухгалтер-кассир. И даже учусь не на программиста! А очень хочется сделать, чтобы некоторым якобы программистам утереть! Кто-то взялся бы проконсультировать меня через личку? Я очень толковая, быстро все пойму, только мне словами нельзя, мне нужно на каком-то элементарном примере!! |
Ответы | Всего ответов: 27 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: adamis@list.ru Вопросов: 153 Ответов: 3632 |
Профиль | Цитата | #1 | Добавлено: 01.07.08 15:35 |
Nat-z, может не стоит с нашим братом погромистом тягаться? Если что и стоит делать, так только ради себя любимой. Утереть нос может и получиться, но это уже не только твоя заслуга ![]() Если по любому нужен элементарный пример, то давай уже тут на форуме и обсудим. Может ещё кому пригодится. Уточни куда именно ты эти значения вставить хочешь? В заготовленную таблицу? Или прямо между слов, в текст? |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 13 Ответов: 85 |
Профиль | Цитата | #2 | Добавлено: 01.07.08 20:35 |
В заготовленную таблицу.
На сейчас имеется файл DOC, в котором я, допустим, вместо реальных значений (цифр и названий) могу проставить что-то типа VALUE001, VALUE002 и проч В VB надо создать нов. доковский файл, аналогичный имеющемуся, только все эти VALUEXXX заменить на заранее просчитанные в программе значения. Новый файл то ли будет сохраняться, то лм нет - выбор пользователя (но если сохранение - то в заранее определенной папке и заранее определенное имя). Очень важно, чтобы пользователь по незнанию не записал результ.файл в исходный шаблон!! А утирать надо, может хоть сами будут учиться писать, а то только винду переставляют да дискеты с умным видом форматируют!! ![]() |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 13 Ответов: 85 |
Профиль | Цитата | #3 | Добавлено: 01.07.08 20:43 |
В принципе все ясно из самой вых.формы. Как образец одной из них - см http://nat-z.nm.ru/VB/forma.rar |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: adamis@list.ru Вопросов: 153 Ответов: 3632 |
Профиль | Цитата | #4 | Добавлено: 02.07.08 10:23 |
Шаблоны *.dot Word открывает также как и документы. Твой отчёт можно сохранить в своей папке как шаблон dot и грузить его. Dim WordObject As Object 'создаём объект Set WordObject = CreateObject("Word.Application" ![]() with WordObject 'грузим документ .Documents.Open FileName:="C:\Мои документы\Шаблоны отчётов\Форма7.dot" 'вносим значения в поля таблиц ActiveDocument.Tables(1).Cell(8, 2).Range.Text = "Smith" ActiveDocument.Tables(2).Cell(8, 2).Range.Text = "Smith" ActiveDocument.Tables(2).Cell(8, 6).Range.Text = "Smith" ActiveDocument.Tables(2).Cell(8, 7).Range.Text = "Smi" ActiveDocument.Tables(3).Cell(2, 4).Range.Text = "Smith" ActiveDocument.Tables(3).Cell(2, 5).Range.Text = "Smith" ActiveDocument.Tables(3).Cell(2, 6).Range.Text = "Smith" ActiveDocument.Tables(3).Cell(2, 7).Range.Text = "Smith" End With Дальше видимо пригодиться пример Holsten-a http://www.vbnet.ru/forum/show.aspx?id=168346 Перехватываем событие сохранения и сохраняем док в нужной нам папке с нужным именем. Вот такое простое решение. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: adamis@list.ru Вопросов: 153 Ответов: 3632 |
Профиль | Цитата | #5 | Добавлено: 02.07.08 10:25 |
Перед ActiveDocument должны быть точки. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 13 Ответов: 85 |
Профиль | Цитата | #6 | Добавлено: 03.07.08 11:38 |
Очень странно, но получилось!!
Правда, с некоторой непоняткой, но посмотрю еще. Посмотрела пример бойца Холстена. Ничего не поняла или устала уже думать. Или попозже. Теперь оргавнизационные вопросы. У меня такой вызов для разных вых форм будет 15-20 (это первоначально). Каждый вызов – в какой-то экранной форме, где по введенному заказу мы с программой будем отбирать данные. Потом – везде стандартный фрагмент: открытие файла (возможно с какими-то проверками и обработкой ошибок), подстановка значений и закрытие файла. Логично было бы фрагмент открытия с проверками (что-то типа: Public Sub exe_word1(NFile As String)
' а это уже не для чтения файла, а для простановки значений. Dim objWord As Object Set objWord = CreateObject("Word.Application" ![]() With objWord .Documents.Open FileName:=NFile .ActiveDocument.Tables(1).Cell(3, 1).Range.Text = GBmenu.Xorg .ActiveDocument.Tables(1).Cell(5, 2).Range.Text = "Sm152" - в *.bas. Но в этом случае при вызове как обращаться к exe_word1 GBmenu.Pth0 + "\Ph\f007.doc"
- выдает мне ошибку.
'With objWord ' .Documents.Open FileName:=NFile ' .ActiveDocument.Tables(1).Cell(4, 1).Range.Text = GBmenu.Xorg И где и как мне располагать что-то типа Public WithEvents app As Word.Application
Private Sub app_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean) .active.Document.FileName:= “xxxxxxx” ‘’’ Cancel = True End Sub для изменения имени файла при сохранении? У меня вообще почему-то в *.bas что-то типа 'Public WithEvents app As Word.Application
'Private Sub app_DocumentBeforeSave(ByVal Doc… Выдает ошибки! И по замене. Мы же создаем пример, полезный для всех? Возможно удобно будет поиск и замена какой-то последовательности символов. Например, в шаблоне имеется текст XORG(50) – то ли в таблице, то ли где-то в любом месте Doc-файла, надо его найти и заменить на определенный в пользовательской программе текст, причем из текста вырезать фрагмент длиной 50 символов (то, что указано в скобках) начиная с XORG… и заменить на определенный в программе текст. Усложняем! |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: adamis@list.ru Вопросов: 153 Ответов: 3632 |
Профиль | Цитата | #7 | Добавлено: 03.07.08 12:26 |
Я сегодня весь день на одном полушарии, логически не думается совсем. Тяжкие последствия недосыпания. Панелька 38” затягивает не по-детски. Ничего не понял, заметил только, что мы упустили objWord.Visible = True. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 24 Ответов: 363 |
Профиль | Цитата | #8 | Добавлено: 03.07.08 13:31 |
Гммм... А можно еще вычисляемые поля использовать, имхо много удобней.
Dim w As Word.Application
Dim d As Word.Document Set w = CreateObject("word.Application" ![]() Set d = w.Documents.Add("c:\tmp.dot" ![]() w.Visible = True d.Fields(1).Select w.Selection.TypeText Text:="khjfghgfjm" d.Fields(2).Select w.Selection.TypeText Text:="OKey" И ненадо по всему доку искать, а че бы нам тута поменять. PS: используются поля типа "комментарии", но с другими типами тоже должно работать. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: adamis@list.ru Вопросов: 153 Ответов: 3632 |
Профиль | Цитата | #9 | Добавлено: 03.07.08 13:35 |
Где-то может и удобнее использовать поля, но в том отчёте, что мне прислала Nat этим полям явно не место ... |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 13 Ответов: 85 |
Профиль | Цитата | #10 | Добавлено: 03.07.08 18:55 |
Где-то может и удобнее использовать поля, но в том отчёте, что мне прислала Nat этим полям явно не место ...
Да, правильно. Но во всех отчетах заведомо будут поля типа: название организации, код ОКПО, р/с и проч. Причем они могут быть как в теле отчета (в таблице) так и в заголовке (вне таблицы) - отчетов много и очень разные. Поэтому нужна функция, которая заведомо при открытии файла всегда его весь пробегает и ищет 5-6 последовательностей символов, которые заменяет на стандартные. Причем некоторые последовательности могут быть и несколько раз! 38 - это температура? Мороженное не ешь, в попей молочка с медом. На выходные отдохни, а с понедельника надо резко начинать думать!! |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 13 Ответов: 85 |
Профиль | Цитата | #11 | Добавлено: 03.07.08 23:26 |
А вот еще беда моя: тетеньки у меня уже вовсю научились ворд запускать и сразу по приходу на работу копий 5-6 запускают (чтобы шарики под ними прятать). Боюсь – потом путаться начнут. Чтобы не путались – поискала для ворда Icon – не нашла!! Можно как-то сменить иконту для ворда, запущенного не вручную, а из VB??
Сколько уже температура?? Спасибо Sl2 - я потом по этому аопросу обязательно достану!! Но мне нужен поиск по всему тексту до конца (на неоднократное вхождение)! |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 24 Ответов: 363 |
Профиль | Цитата | #12 | Добавлено: 04.07.08 00:27 |
Но мне нужен поиск по всему тексту до конца (на неоднократное вхождение)!
А так нельзя? .Selection.WholeStory s = .Selection.Text в переменной весь текст документа, редактируй (replace'ы там всякие) как душе угодно. |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: adamis@list.ru Вопросов: 153 Ответов: 3632 |
Профиль | Цитата | #13 | Добавлено: 04.07.08 09:10 |
Нет, слава богу здоров пока. Имел ввиду ЖК панель 38 дюймов. Поиск с заменой есть в Ворде, а вот иконку не встречал. Со вчерашними вопросами я так понял разобрались уже? |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 13 Ответов: 85 |
Профиль | Цитата | #14 | Добавлено: 07.07.08 17:11 |
Теперь по сохранению документа под др именем. В том примере:
Private Sub app_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
Неопред.тип Document. Где его определить и как? И что значит “в проекте шаблона”?? И другое – как мне указать имя файла при сохранении (точнее – имя и путь к файлу по умолчанию) если я даже и вставлю обработку события сохранения изменений в файле: objWord.Documents.Open.FileName = “..\.....................” - так что ли??
|
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 2795 |
Web-сайт: Профиль | Цитата | #15 | Добавлено: 07.07.08 17:44 |
как я понимаю: Dim objDoc As Word.Document
илиSet objDoc = New Document 'Dim objDoc As Object
'Set objDoc = CreateObject("Word.Document" ![]() |
|