Я работаю над проектом, который требует от меня сохранить большое количество вложений в папку и отфильтровать их.Как извлечь вложения из Outlook, сохранить в качестве темы и удалить недопустимые символы?
В настоящее время я могу сохранить вложения с темой письма как имя файла. Если имеется более одного вложения, оно сохраняет в качестве строки темы (1) или (2) и так далее.
я в настоящее время есть скрипт, который будет делать большую часть того, что мне нужно (Благодаря помощи от 0m3r в нижеприведенном отвечено)
Последнее, что мне нужно, чтобы завершить этот сценарий является то, что будет пропускать специальный caracters из строка темы, прежде чем она использует строку темы в качестве имени файла. Проблема, с которой я сталкиваюсь, заключается в том, что программа не сохраняет файлы правильно, если объект является Forward (FW :) или Reply (RE :) Я подозреваю, что «:» - это то, что разрушает файл сохранения. Например, если Тема читает «FW: Вот файл, который вы запросили 2017», то, что я получаю, является файлом, сохраненным как «FW» без расширения файла. Мне нужно удалить «:» или «FW:», чтобы этого не произошло.
Может ли кто-нибудь предоставить мне исправление, мне нужно удалить специальные символы из темы в качестве конвертированного в имя файла сохранения?
Я думаю, что для этого потребуется массив, но я не уверен, как его загладить и какую часть скрипта добавить.
Что-то вроде Array ("<", ">", "|", "/", "*", "\", "?", "" ")
Public Function SaveAttachmentsFromSelection() As Long
Dim objFSO As Object
Dim objShell As Object
Dim objFolder As Object
Dim objItem As Object
Dim selItems As Selection
Dim atmt As Attachment
Dim strAtmtPath As String
Dim strAtmtFullName As String
Dim strAtmtName As String
Dim strAtmtNameTemp As String
Dim intDotPosition As Integer
Dim atmts As Attachments
Dim lCountEachItem As Long
Dim lCountAllItems As Long
Dim strFolderPath As String
Dim blnIsEnd As Boolean
Dim blnIsSave As Boolean
blnIsEnd = False
blnIsSave = False
lCountAllItems = 0
On Error Resume Next
Set selItems = ActiveExplorer.Selection
If Err.Number = 0 Then
lHwnd = FindWindow(olAppCLSN, vbNullString)
If lHwnd <> 0 Then
Set objShell = CreateObject("Shell.Application")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objShell.BrowseForFolder(lHwnd, "Select folder to save attachments:", _
BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN, CSIDL_DESKTOP)
If Err.Number <> 0 Then
MsgBox "Run-time error '" & CStr(Err.Number) & " (0x" & CStr(Hex(Err.Number)) & ")':" & vbNewLine & _
Err.Description & ".", vbCritical, "Error from Attachment Saver"
blnIsEnd = True
GoTo PROC_EXIT
End If
If objFolder Is Nothing Then
strFolderPath = ""
blnIsEnd = True
GoTo PROC_EXIT
Else
strFolderPath = CGPath(objFolder.Self.Path)
For Each objItem In selItems
lCountEachItem = objItem.Attachments.Count
If lCountEachItem > 0 Then
Set atmts = objItem.Attachments
For Each atmt In atmts
strAtmtFullName = atmt.FileName
intDotPosition = InStrRev(strAtmtFullName, ".")
strAtmtName = Right$(strAtmtFullName, Len(strAtmtFullName) - intDotPosition)
strAtmtPath = strFolderPath & objItem.subject & Chr(46) & strAtmtName
Dim lngF As Long
lngF = 1
If Len(strAtmtPath) <= MAX_PATH Then
blnIsSave = True
Do While objFSO.FileExists(strAtmtPath)
strAtmtNameTemp = objItem.subject & "(" & lngF & ")"
strAtmtPath = strFolderPath & strAtmtNameTemp & Chr(46) & strAtmtName
If Len(strAtmtPath) > MAX_PATH Then
lCountEachItem = lCountEachItem - 1
blnIsSave = False
Exit Do
End If
lngF = lngF + 1
Loop
If blnIsSave Then atmt.SaveAsFile strAtmtPath
Else
lCountEachItem = lCountEachItem - 1
End If
Next
End If
lCountAllItems = lCountAllItems + lCountEachItem
Next
End If
Else
MsgBox "Failed to get the handle of Outlook window!", vbCritical, "Error from Attachment Saver"
blnIsEnd = True
GoTo PROC_EXIT
End If
Else
MsgBox "Please select an Outlook item at least.", vbExclamation, "Message from Attachment Saver"
blnIsEnd = True
End If
PROC_EXIT:
SaveAttachmentsFromSelection = lCountAllItems
If Not (objFSO Is Nothing) Then Set objFSO = Nothing
If Not (objItem Is Nothing) Then Set objItem = Nothing
If Not (selItems Is Nothing) Then Set selItems = Nothing
If Not (atmt Is Nothing) Then Set atmt = Nothing
If Not (atmts Is Nothing) Then Set atmts = Nothing
If blnIsEnd Then End
End Function
Public Function CGPath(ByVal Path As String) As String
If Right(Path, 1) <> "\" Then Path = Path & "\"
CGPath = Path
End Function
Public Sub ExecuteSaving()
Dim lNum As Long
lNum = SaveAttachmentsFromSelection
If lNum > 0 Then
MsgBox CStr(lNum) & " attachment(s) was(were) saved successfully.", vbInformation, "Message from Attachment Saver"
Else
MsgBox "No attachment(s) in the selected Outlook items.", vbInformation, "Message from Attachment Saver"
End If
End Sub
Здравствуйте и добро пожаловать в SO. Пожалуйста, найдите время, чтобы прочитать страницу справки, в том числе [Какие темы можно задать здесь?] (Http://stackoverflow.com/help/on-topic) и [Какие типы вопросов я должен избегать?] (Http : //stackoverflow.com/help/dont-ask). Также обратите внимание, что SO НЕ является службой написания кода ... мы программисты, пытающиеся помочь другим программистам в решении конкретных вопросов или ошибок. Если вы не включаете код, с которым работаете, и подробное объяснение любых ошибок или ожиданий против реальности ... мы не можем много помочь. Используйте код, отформатированный в [MCVE] (http://stackoverflow.com/help/mcve) – Rdster
Я не понимаю вашу проблему. Вы говорите, что нашли код, который сохраняет вложения. Это будет включать в себя инструкцию типа 'ItemCrnt.Attachment (InxA) Path & FileName'. Обычно 'FileName' будет« DisplayName »вложения. Во-первых, вам нужно извлечь расширение с предыдущим периодом из 'DisplayName'. Во-вторых, замените оператор save: 'ItemCrnt.Attachment (InxA) Path & ItemCrnt.Subject &" ("& InxA &") "& Extn' –
Можете ли вы опубликовать свой код, чтобы мы могли помочь вам исправить его? – 0m3r