Ugh !!! Quanto eu odeio quando as pessoas postam trechos de código, mas não fornecem toda a coisa toda limpa ...:)
De qualquer forma, graças ao seu trabalho combinado, eu consegui concluir minha tarefa em menos de um dia, então aqui você acessa a Internet. CÓDIGO LIVRE.
Adicionado:
- Eu limpei e até adicionei lógica para excluir as dez primeiras linhas da planilha do Excel, porque nosso extrato de dados vem com o HEADERS, então agora é um arquivo CLEAN CSV.
- Eu adicionei argumento para usar as configurações LOCAIS na máquina, para que você possa definir LIST DELIMITER como desejar no PAINEL DE CONTROLE em CONFIGURAÇÕES REGIONAIS. Ele continuou salvando o delimitado pelo COMMA, independentemente das configurações do meu sistema, então agora isso deve respeitar as configurações do meu sistema e usar o PIPE.
- Finalmente, estou trabalhando com o Office 2016 e tive que garantir que a EXCEL 16 LIBRARY fosse adicionada às referências.
Referências do VBA no Outlook
SIMPLESMENTE PERFEITA !!!
Public Sub Convert_CSV(itm As Outlook.MailItem)
' Variables
Dim objExcel As Object, IsNew As Boolean
Dim objAtt As Outlook.Attachment
Dim saveFolder As String, sFileName As String, sPathName As String
' CONFGURE FOR YOUR DEPLOYMENT
saveFolder = "C:\inetpub\wwwroot\xls"
If Not TypeName(itm) = "MailItem" Then Exit Sub
If Dir(saveFolder, vbDirectory) = "" Then MkDir saveFolder
' Get/Create Excel object
On Error Resume Next
Set objExcel = GetObject(, "Excel.Application")
If Err Then
Err.Clear
IsNew = True
Set objExcel = CreateObject("Excel.Application")
End If
objExcel.FindFormat.Clear
' Main
For Each objAtt In itm.Attachments
sFileName = LCase(objAtt.FileName)
If sFileName Like "*.xls" Or sFileName Like "*.xls?" Then
sPathName = saveFolder & "\" & sFileName
objAtt.SaveAsFile sPathName
CVSName = Split(objAtt.FileName, ".")(0)
CVSName = saveFolder & "\" & CVSName
With objExcel.Workbooks.Open(sPathName)
' Delete first ten rows.
For i = 1 To 10
Rows(1).EntireRow.Delete
Next
.SaveAs FileName:=CVSName, _
FileFormat:=xlCSV, _
Local:=True, _
CreateBackup:=False
.Close SaveChanges:=True
End With
Kill sPathName
objExcel.Quit
End If
Next
If IsNew Then objExcel.Quit
Set objExcel = Nothing
Set objAtt = Nothing
End Sub