Вопрос по Ole (ms Word)

Тема в разделе "Lotus - Программирование", создана пользователем vvlad, 19 янв 2007.

  1. vvlad

    vvlad Well-Known Member

    Регистрация:
    19 янв 2007
    Сообщения:
    63
    Симпатии:
    0
    Hi All!

    Ситуация такова:
    Есть код, написанный для Shared Action, который прекрасно работает:
    ...
    Set wObj = CreateObject("Word.Application")
    wObj.Documents.Add FileName
    wObj.Application.WindowState = wdWindowStateMaximize '
    wObj.Visible = True
    With wObj
    With .Selection
    .GoTo wdGoToBookmark, , , "ResumeNumber"
    ...

    Проблема: Создаю Агент, вставляю в него тот же код (касающийся OLE),
    на строке ".GoTo wdGoToBookmark, , , "ResumeNumber"" в Word вываливается ошибка "Закладка не найдена". Причем Documents.Add и wObj.Visible = True выполняются.

    Файл шаблона "FileName" в обоих случаях "c:\Шаблон.doc"

    Никто не сталкивался с таким?
    Или может я что-то делаю не так?

    Спасибо.
     
  2. allex

    allex Гость

    Работал с полями-Word`a, все окейно.
    С bookmark-ми такая же засада
     
  3. vvlad

    vvlad Well-Known Member

    Регистрация:
    19 янв 2007
    Сообщения:
    63
    Симпатии:
    0
    А с полями это как?
    т.е. переход не на закладку, а на поле?
    Если не сложно, приведите пример.
     
  4. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    я работал не с полями а просто заменял текст , так
    Код (Text):
    Set wordApp = CreateObject ("Word.Application")
    Let wordApp.Visible = False ' Показывать
    Set wordDoc = wordApp.Documents.Open(TmpNameFile) ' имя шаблона
    Call FindAndReplaceText(wordApp, wordDoc, "%SocialStatus%", GDoc.Social(0)) 'Соц.статус - заменяем в документе Word текст %SocialStatus% на значение поля GDoc.Social(0)
    Call FindAndReplaceText(wordApp, wordDoc, "%Address%", GDoc.Address(0)) ' адреса     
    Call FindAndReplaceText(wordApp, wordDoc, "%Phone%", GDoc.Phone(0)) 'тел автора   
    If GDoc.Anonym(0) ="1" Then
    Соответкственно в шаблоне в места где должен быть внесён текст ставяться такие вот записи(тоже обычный текст, но для себя я его выделил спец символами, в данном случае с обоих сторон % ), вот собсвенно и всё

    Да, вот код самой процедуры реплейса
    Код (Text):
    Sub FindAndReplaceText(WordApp As Variant, wordDoc As Variant, ChangedText As String, ReplacementText As String)
    Const intMaxLenWord = 255       ' максимальная длина значения переменной для замены в шаблоне
    Const intCutLenWord = 245       ' длина частей значений переменной при выводе длинных значений (если длина > intMaxLenWord)
    Const strReplaceKey = "~1#$*"   ' хвост для вывода длинных значений
    Dim j, lngCountSteps As Long
    Dim strOutputWord As String

    On Error Goto LocalErrorHandler

    ' for ReplacementText, which Len < 255. Replace once
    If Len(ReplacementText) < intMaxLenWord Then
    With WordApp.Selection.Find
    .Text = ChangedText
    .Replacement.Text = ReplacementText
    .Forward = True
    .Wrap = 1
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    End With
    Call WordApp.Selection.Find.Execute(,,,,,,,,,,2)    'wdReplaceAll

    ' for ReplacementText, which Len >= 255. Replace for several steps
    Else        ' count of steps   
    lngCountSteps = (Len(ReplacementText)\intCutLenWord) ' Msgbox("частей=" + Cstr(lngCountSteps + 1))
    For j = 0 To lngCountSteps
    If j = lngCountSteps Then           ' last step
    strOutputWord = ReplacementText
    ReplacementText = ""
    Else                                    ' not last step - add "tail"
    strOutputWord = Left(ReplacementText, intCutLenWord) + strReplaceKey
    ReplacementText = Right(ReplacementText, Len(ReplacementText) - IntCutLenWord)
    End If
    If j = 0 Then
    Call wordDoc.Content.Find.Execute (ChangedText,_
    False, False, False, False, False, True,, False, strOutputWord, 2)
    Else
    Call wordDoc.Content.Find.Execute (strReplaceKey,_
    False, False, False, False, False, True,, False, strOutputWord, 2)
    End If 
    Next   
    End If
    Done:
    Exit Sub
    LocalErrorHandler: 
    Print " FindAndReplaceText Error:" + Error$
    Resume done
    End Sub
     
  5. allex

    allex Гость

    Код (Text):
    Here is the code for creating a new Word document with form fields and updating the form fields with predefined values.

    If you are in a UIDcument it is very easy to substitue the predefined values with variables/fields from the UIDocument


    Dim s As New notessession
    Dim todaydate As New notesdatetime("Today")

    Dim word As Variant
    Dim wordoc As Variant

    Dim todaysdate As String
    Dim orderid As String
    Dim producedby As String
    Dim storeid As String
    Dim customername As String
    Dim address As String
    Dim citytown As String
    Dim postcode As String
    Dim daytimeno As String
    Dim eveningno As String

    'Predefined values: (replace with field values from uidoc)
    todaysdate = todaydate.localtime
    orderid = "2183763248"
    producedby = s.username
    storeid = "12345"
    customername = "John Doe"
    address = "Apartment 5c, 5 Test Avenue"
    citytown = "Testtown"
    postcode = "XX5 5XX"
    daytimeno = "1234567890"
    eveningno = "0987654321"

    'Create the Word object:
    Set word = CreateObject("Word.Application") 'Create Word object
    Call word.documents.add("Return and Uplift.dot") 'Create a new document based on the template "Return and Uplift.Dot"
    Set worddoc = word.activedocument 'Get a handle for the active document

    'Assign the field values:
    worddoc.FormFields(1).result = todaysdate
    worddoc.FormFields(2).result = orderid
    worddoc.FormFields(3).result = producedby
    worddoc.FormFields(4).result = storeid
    worddoc.FormFields(5).result = customername
    worddoc.FormFields(6).result = address
    worddoc.FormFields(7).result = citytown
    worddoc.FormFields(8).result = postcode
    worddoc.FormFields(9).result = daytimeno
    worddoc.FormFields(10).result = eveningno

    worddoc.saveas(customername) 'save the document with the filename of "John Doe.doc"
    word.visible = True 'Comment this line if you don't want to show Word.
    'word.quit 'remove comment if you want to close rather than show Word.
     

    Вложения:

  6. oshmianski

    oshmianski Гость

    Для: vvlad
    У меня все ОК.
    LN 7.0.2, MS Office 2002
    Код (Text):
    Dim wObj As Variant
    Set wObj = CreateObject("Word.Application")
    wObj.Documents.Add "e:\temp\asd.doc"
    wObj.Application.WindowState = 1
    wObj.Visible = True
    With wObj
    With .Selection
    .GoTo -1, , , "asd"
    End With
    End With
    Закладку делал так: выделил текст, Вставка -> Закладка
     
  7. vvlad

    vvlad Well-Known Member

    Регистрация:
    19 янв 2007
    Сообщения:
    63
    Симпатии:
    0
    Спасибо всем за помощь!
    Испробовал все предложения.
    В моей конфигурации (LN 6.5.5 + MS Office 2003) я остановился на следующем:

    ...
    With wObj
    With .Selection
    .GoTo wdGoToComment, , , "A1"
    .TypeText doc.GetItemValue("f1")(0)
    ...

    Для моей задачи важно именно поставить курсор в заданное место шаблона.
    На практике выяснено, что из "назначений" метода GOTO (wdGoToBookmark, wdGoToComment, wdGoToField, wdGoToLine, wdGoToTable) у меня работает только wdGoToComment. На нем и остановился.
     
Загрузка...
Похожие Темы - Вопрос по Ole
  1. ApplePen
    Ответов:
    0
    Просмотров:
    80
  2. gURaBA_N
    Ответов:
    3
    Просмотров:
    98
  3. kartaman
    Ответов:
    0
    Просмотров:
    128
  4. Peter
    Ответов:
    4
    Просмотров:
    527
  5. di0d_
    Ответов:
    1
    Просмотров:
    442

Поделиться этой страницей