2016-03-03 23 views
1

我正在研究從文檔中提取附件的蓮花腳本代碼。該代碼工作正常,除了幾個文件,並拋出一個錯誤: 錯誤代碼:91 - 錯誤:對象變量未設置使用getScript方法獲取附件的句柄使用LotusScript

下面是我用做提取代碼:

If (doc.HasItem("$File")) Then 
     attachments = Evaluate("@AttachmentNames", doc)       
     Forall o In attachments  
      Set AttachmentName = doc.GetAttachment(o) 
      Call AttachmentName.ExtractFile(Attachfoldername & "\" & AttachFileNames)         
     End Forall 
    End If 

在調試時,我發現附件名稱變體沒有被設置,只是在進入下一行時顯示[NOTESEMBEDDEDOBJECT]值。請參閱下面的屏幕打印: AttachmentName variable not set

另外,您可以從上圖看到附件名稱包含某些垃圾字符。代碼失敗的其他文檔很少,並返回相同的錯誤。所有這些附件中都帶有具有奇怪字符的文件名(例如:「■■■■1.jpg」,「ARMédipel faible teneur encapasañcine.doc」)。

表單中沒有使用的富文本字段,我無權查看錶單的設計,但是我可以在文檔屬性中看到$ FILE字段。 我最初認爲問題可能與文件名有關,因此爲了測試此問題,我將具有相同名稱的文件附加到測試文檔的富文本字段中。這一次代碼能夠按預期成功地提取附件。所以現在我仍然想知道可能是什麼問題。

我是Lotus Script的初學者,所以我不知道我是否錯過了一些東西。

任何幫助解決這個將不勝感激。提前致謝!

回答

1

我會嘗試使用doc.EmbeddedOjbects()而不是Evaluate(「@ AttachmentNames」)。它返回一個NotesEmbdeddedObject數組,所以你不需要使用doc.getAttachment()。

我知道,使用評估(「@ AttachmentNames」)是一種有用的技術,當您將豐富文本字段中的附件和附件組合在一起時,您不會說明沒有富文本字段,我認爲使用方法應該找到你的附件,如果公式和LotusScript之間的邊界上的附件名稱有趣,使用doc.EmbeddedObjects可能會避免這個問題。

你的代碼看起來像這樣(未經測試!):

If (doc.HasItem("$File")) Then 
     attachments = doc.EmbeddedObjects()       
     Forall o In attachments 
      if o.Type() = EMBED_ATTACHMENT then 
       Call o.ExtractFile(Attachfoldername & "\" & o.Name()) 
      endif         
     End Forall 
    End If 
+0

我試圖你上面所建議的,但是然後再次,附件變量不獲取設定在線路的任何值的代碼:附件= doc.EmbeddedObjects()..和它拋出下一行類型不匹配錯誤 - Forall o附件 – reshussain

+0

如果您在Notes客戶端中打開文檔,您能看到附件嗎? –

+0

是的,我能夠看到附件並打開,查看並保存它... – reshussain

0

你很接近你所需要的。用於NotesDocument的EmbeddedObjects數組不包含附件 - 因此您需要在GetAttachment方法中使用附件文件名列表。我將附件變量聲明爲變體 - 所以我強制GetAttachment函數調用中的字符串值以避免類型不匹配問題。

attachments = Evaluate("@AttachmentNames", Doc)  
    For x = 0 To UBound(attachments) 
     Set embedObj = Doc.GetAttachment(CStr(attachments(x))) 
     filepath = tempDir + "\" + CStr(attachments(x)) 
     Call embedObj.Extractfile(filepath) 
    Next 
相關問題