Выгрузка в Excel

Тема в разделе "Lotus - Программирование", создана пользователем Lex-Hunter, 25 окт 2007.

  1. Lex-Hunter

    Lex-Hunter Гость

    Доброго времени суток!
    Есть задача выгрузки данных в Excel, делаю выгрузку Attachment:
    Код (Text):
    Set wObj = CreateObject("Excel.Application")
    Set emo=CurrentDoc.GetAttachment("Test.xls")
    Call emo.ExtractFile("С:\test")
    Set WordDoc = wObj.Documents.open(xlFilename)
    На строке Call emo.ExtractFile("С:\test") выдается ошибка: Object variable not set
    Подскажите что не так.
     
  2. D!m@n

    D!m@n Гость

    Аттачмент точно есть в документе? Полный код можно?
     
  3. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Lex-Hunter
    Зделайте проверку
    Код (Text):
    If Not emo Is Nothing Then Call emo.ExtractFile("С:\test")
     
  4. Lex-Hunter

    Lex-Hunter Гость

    Для D!m@n
    Аттачмент прикреплен к форме.

    Код (Text):
    Sub Click(Source As Button)
    Dim CurrentUIWorkspace As NotesUIWorkspace
    Dim CurrentUIDoc As NotesUIDocument
    Dim CurrentDoc As NotesDocument
    Dim WordDoc As Variant
    Dim wObj As Variant
    Dim emo As Variant

    Set CurrentUIWorkspace=New NotesUIWorkspace
    Set CurrentUIDoc = CurrentUIWorkspace.CurrentDocument
    Set CurrentDoc = CurrentUIDoc.Document

    Set wObj = CreateObject("Excel.Application")
    Set emo=CurrentDoc.GetAttachment("Test.xls")
    Call emo.ExtractFile("С:\test")
    Set WordDoc = wObj.Documents.open("С:\test")

    WordDoc.ActiveSheet.Cells(row, col+5) = "test"
    WordDoc.ActiveSheet.Cells(row, col+5).Borders.LineStyle = 1
    ...
    ...
    Сори за xlFilename.
     
  5. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Lex-Hunter
    Папробуйте через NotesEmbeddedObject и NotesRichTextItem

    вот как в примерах самого лотуса

    Код (Text):
    Dim doc As NotesDocument
    Dim rtitem As Variant
    Dim fileCount As Integer
    Const MAX = 100000
    fileCount = 0  
    '...set value of doc...
    Set rtitem = doc.GetFirstItem( "Body" )
    If ( rtitem.Type = RICHTEXT ) Then
    Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) _
    And ( o.FileSize > MAX ) Then
    fileCount = fileCount + 1
    Call o.ExtractFile _
    ( "c:\reports\newfile" & Cstr(fileCount) )
    Call o.Remove
    Call doc.Save( True, True )
    End If
    End Forall
    End If
     
  6. Lex-Hunter

    Lex-Hunter Гость

    Вот попробовал:
    Код (Text):
        Dim CurrentUIWorkspace As NotesUIWorkspace
    Dim CurrentUIDoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim rtitem As Variant
    Dim fileCount As Integer

    Set CurrentUIWorkspace=New NotesUIWorkspace
    Set CurrentUIDoc = CurrentUIWorkspace.CurrentDocument
    Set Doc = CurrentUIDoc.Document

    Const MAX = 100000
    fileCount = 0  
    Set rtitem = doc.GetFirstItem( "Attachment" )
    If ( rtitem.Type = RICHTEXT ) Then
    Forall o In rtitem.EmbeddedObjects
    If ( o.Type = EMBED_ATTACHMENT ) _
    And ( o.FileSize > MAX ) Then
    fileCount = fileCount + 1
    Call o.ExtractFile _
    ( "c:\test" & Cstr(fileCount) )
    Call o.Remove
    Call doc.Save( True, True )
    End If
    End Forall
    End If
    На строке "If ( rtitem.Type = RICHTEXT ) Then" выдается ошибка: Object variable not set
     
  7. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ну значит нету item'a
    Если аттачмент прикреплён к форме, то логично, что item'a может и не быть.
     
  8. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Lex-Hunter
    1. Проверте наличие поля
    Код (Text):
    if not doc.hasItem( "Attachment" ) then exit sub
    2. Папробуйте проверить тип поля через
    If ( rtitem.Type = 1 ) ...
     
  9. Lex-Hunter

    Lex-Hunter Гость

    Для: Morpheus
    Проверка показала что его нет, но визуально, то он есть.
     
  10. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Если он прикреплен на форме (как embedded object), то никакого поля нет.
    А значит нельзя использовать метод ExtractFile. Кстати, в хелпе это написано.
    Прикрепляй в ричтекст его.
     
  11. Lex-Hunter

    Lex-Hunter Гость

    Вопрос: Как прикрепить документ к форме, так что бы потом его можно было програмно обрабатывать?
     
  12. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-Lex-Hunter+25:10:2007, 10:08 -->
    <span class="vbquote">(Lex-Hunter @ 25:10:2007, 10:08 )</span><!--QuoteEBegin-->Вопрос: Как прикрепить документ к форме, так что бы потом его можно было програмно обрабатывать?
    [snapback]82977" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Зачем крепить к форме?


    На всяк случай кусок кода - работа с прикреплёнными к документу атачами

    This script gets an attachment called JIM.SAM from a document.
    Код (Text):
    Dim doc As NotesDocument
    Dim object As NotesEmbeddedObject
    '...set value of doc...
    Set object = doc.GetAttachment( "jim.sam" )
     
  13. Lex-Hunter

    Lex-Hunter Гость

    Для: Morpheus
    Использовать в качестве шаблона для отчета.
     
  14. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: Lex-Hunter
    Ну а чем RT-поле не устраивает?
     
  15. Lex-Hunter

    Lex-Hunter Гость

    Вопрос: Как прикрепить документ к полю типа-RT на форме в дизайнере?
     
  16. Sandr

    Sandr Гость

    Не согласен...
    Если прикрепить на бекенде файл в ричтекст, то он прикрепляется к документу... из ричтекста его потом не вытянешь - проверено неоднократно... А методы эмбедетатачмента документа такие же как эмбедет атачмента ричтекста...

    Атчим примерно так:
    Код (Text):
       
    Dim file As Variant
    Dim rtItem As NotesRichTextItem
    Dim obj As Variant
    Dim o As notesEmbeddedObject
    Set doc = uidoc.Document
    Set rtItem = doc.GetFirstItem("Body")

    Let file = ws.OpenFileDialog(False,"Выберите файл для вложения!")
    If Isempty(file) Then Exit Sub

    If rtItem Is Nothing Then
    Set rtItem = doc.CreateRichTextItem("Body")
    End If


    Call rtItem.EmbedObject(1454, "", Cstr(File(0)))

    Экстрактим примерно так:
    Код (Text):
           
    Dim filename As String
    Dim o As NotesEmbeddedObject

    If doc.HasEmbedded Then
    Set o = doc.GetAttachment(doc.GetItemValue("AttachName")(0))
    If Not o Is Nothing Then

    On Error Resume Next
    filename = Environ$("Temp") & "\" & o.Source   
    On Error Goto errorProc

    Else
    Msgbox "Невозможно открыть вложение.", 48, "Ошибка"
    Exit Function
    End If

    path = ws.SaveFileDialog(False,,,dr, o.Source)

    If Not Isempty(path) Then
    On Error Goto extracting
    Open Path(0) For Input As 1
    Close 1
    If Msgbox ("Заменить сщуствующий " & o.Name & "?", 4 + 32 ,db.Title) = 6 Then
    Call o.ExtractFile(Path(0))        
    End If
    End If
     
  17. D!m@n

    D!m@n Гость

    Можно придумать еще сотню вариантов.
    Например, если шаблон один для всех пользователей - можно сделать профильный (Profile) документ и хранить в нем этот аттачмент.
     
  18. Sandr

    Sandr Гость

    А вот это зачем?
     
  19. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-Sandr+25:10:2007, 11:36 -->
    <span class="vbquote">(Sandr @ 25:10:2007, 11:36 )</span><!--QuoteEBegin-->Если прикрепить на бекенде файл в ричтекст, то он прикрепляется к документу... из ричтекста его потом не вытянешь - проверено неоднократно... А методы эмбедетатачмента документа такие же как эмбедет атачмента ричтекста...
    [snapback]82990" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Документ и форма немного разные вещи. :)
     
  20. Sandr

    Sandr Гость

    Невнимательность моя :) Но если вдуматься, то форма - тоже документ... и с ним можно работать так же как и с другими доками... :)
     
Загрузка...

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