Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Использование шаблонов Word Добавлено: 01.07.08 13:38  

Автор вопроса:  nat-z
Здесь мне уже Smith и Winand помогли по Winwordу.
А теперь тут же рядом еще задумка у меня появилась.
Мне надо выводить отчеты в ворд, в принципе можно создать шаблон. Как туда из VB вставлять значения? И как создавать вордовский файл по определенному шаблону и очень важно - чтобы пользователь не записал случайно вых.файл в имеющийся шаблон!!
Я понимаю, что становлюсь уже наверно неприятной как собеседник, но я не программист, просто бухгалтер-кассир. И даже учусь не на программиста! А очень хочется сделать, чтобы некоторым якобы программистам утереть!
Кто-то взялся бы проконсультировать меня через личку? Я очень толковая, быстро все пойму, только мне словами нельзя, мне нужно на каком-то элементарном примере!!

Ответить

  Ответы Всего ответов: 27  

Номер ответа: 1
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #1 Добавлено: 01.07.08 15:35

     Nat-z, может не стоит с нашим братом погромистом тягаться? Если что и стоит делать, так только ради себя любимой.

     Утереть нос может и получиться, но это уже не только твоя заслуга :) нечестно как-то. Задача несложная, сама смоглабы разобраться.

     Если по любому нужен элементарный пример, то давай уже тут на форуме и обсудим. Может ещё кому пригодится.

     Уточни куда именно ты эти значения вставить хочешь? В заготовленную таблицу? Или прямо между слов, в текст?

Ответить

Номер ответа: 2
Автор ответа:
 nat-z



Вопросов: 13
Ответов: 85
 Профиль | | #2 Добавлено: 01.07.08 20:35
В заготовленную таблицу.
На сейчас имеется файл DOC, в котором я, допустим, вместо реальных значений (цифр и названий) могу проставить что-то типа VALUE001, VALUE002 и проч
В VB надо создать нов. доковский файл, аналогичный имеющемуся, только все эти VALUEXXX заменить на заранее просчитанные в программе значения.
Новый файл то ли будет сохраняться, то лм нет - выбор пользователя (но если сохранение - то в заранее определенной папке и заранее определенное имя).
Очень важно, чтобы пользователь по незнанию не записал результ.файл в исходный шаблон!!
А утирать надо, может хоть сами будут учиться писать, а то только винду переставляют да дискеты с умным видом форматируют!! :))

Ответить

Номер ответа: 3
Автор ответа:
 nat-z



Вопросов: 13
Ответов: 85
 Профиль | | #3 Добавлено: 01.07.08 20:43

В принципе все ясно из самой вых.формы.
Как образец одной из них - см
http://nat-z.nm.ru/VB/forma.rar

Ответить

Номер ответа: 4
Автор ответа:
 Smith



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
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #5 Добавлено: 02.07.08 10:25

     Перед ActiveDocument должны быть точки.

Ответить

Номер ответа: 6
Автор ответа:
 nat-z



Вопросов: 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
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #7 Добавлено: 03.07.08 12:26

      Я сегодня весь день на одном полушарии, логически не думается совсем.

      Тяжкие последствия недосыпания. Панелька 38” затягивает не по-детски.

      Ничего не понял, заметил только, что мы упустили objWord.Visible = True.

Ответить

Номер ответа: 8
Автор ответа:
 s12



Вопросов: 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
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #9 Добавлено: 03.07.08 13:35

      Где-то может и удобнее использовать поля, но в том отчёте, что мне прислала Nat этим полям явно не место ...

Ответить

Номер ответа: 10
Автор ответа:
 nat-z



Вопросов: 13
Ответов: 85
 Профиль | | #10 Добавлено: 03.07.08 18:55
 
Где-то может и удобнее использовать поля, но в том отчёте, что мне прислала Nat этим полям явно не место ...


Да, правильно.
Но во всех отчетах заведомо будут поля типа: название организации, код ОКПО, р/с и проч.
Причем они могут быть как в теле отчета (в таблице) так и в заголовке (вне таблицы) - отчетов много и очень разные. Поэтому нужна функция, которая заведомо при открытии файла всегда его весь пробегает и ищет 5-6 последовательностей символов, которые заменяет на стандартные. Причем некоторые последовательности могут быть и несколько раз!
 38 - это температура? Мороженное не ешь, в попей молочка с медом. На выходные отдохни, а с понедельника надо резко начинать думать!!

Ответить

Номер ответа: 11
Автор ответа:
 nat-z



Вопросов: 13
Ответов: 85
 Профиль | | #11 Добавлено: 03.07.08 23:26
А вот еще беда моя: тетеньки у меня уже вовсю научились ворд запускать и сразу по приходу на работу копий 5-6 запускают (чтобы шарики под ними прятать). Боюсь – потом путаться начнут. Чтобы не путались – поискала для ворда Icon – не нашла!! Можно как-то сменить иконту для ворда, запущенного не вручную, а из VB??

Сколько уже температура??

Спасибо Sl2 - я потом по этому аопросу обязательно достану!! Но мне нужен поиск по всему тексту до конца (на неоднократное вхождение)!

Ответить

Номер ответа: 12
Автор ответа:
 s12



Вопросов: 24
Ответов: 363
 Профиль | | #12 Добавлено: 04.07.08 00:27
Но мне нужен поиск по всему тексту до конца (на неоднократное вхождение)!


А так нельзя?

.Selection.WholeStory
s = .Selection.Text

в переменной весь текст документа, редактируй (replace'ы там всякие) как душе угодно.

Ответить

Номер ответа: 13
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #13 Добавлено: 04.07.08 09:10

      Нет, слава богу здоров пока.
      Имел ввиду ЖК панель 38 дюймов.

      Поиск с заменой есть в Ворде, а вот иконку не встречал.

      Со вчерашними вопросами я так понял разобрались уже?

Ответить

Номер ответа: 14
Автор ответа:
 nat-z



Вопросов: 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
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #15
Добавлено: 07.07.08 17:44
как я понимаю:
Dim objDoc As Word.Document
Set objDoc = New Document
или
'Dim objDoc As Object
'Set objDoc = CreateObject("Word.Document";)

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам