스프레드시트 첨부 파일을 CSV 형식으로 저장하려고 합니다.
스프레드시트 첨부 파일이 발견되면 프로세스를 시작할 수 있지만 두 개의 인수를 사용하는 변환 스크립트와 이를 결합하는 데 어려움을 겪고 있습니다.
첨부 파일 저장
Public Sub saveAttachToDiskcvs(itm As Outlook.MailItem)
' --> Settings. change to suit
Const MASK = "Olus" ' Value to be found
Const SHEET = "sheet2" ' Sheet name or its index where to find
' <--
' Excel constants
Const xlValues = -4163, xlWhole = 1, xlPart = 2
' Variables
Dim objExcel As Object, IsNew As Boolean, x As Object
Dim objAtt As Outlook.Attachment
Dim saveFolder As String, sFileName As String, sPathName As String
saveFolder = "C:\form"
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
With objExcel.workbooks.Open(sPathName, ReadOnly:=True)
Set x = .sheets(SHEET).UsedRange.Find(MASK, LookIn:=xlValues, LookAt:=xlPart)
If x Is Nothing Then Kill sPathName Else Set x = Nothing
.Close False
End With
End If
Next
If IsNew Then objExcel.Quit
End Sub
CSV 형식
if WScript.Arguments.Count < 2 Then
WScript.Echo "Error! Please specify the source path and the
destination. Usage: XlsToCsv SourcePath.xls Destination.csv"
Wscript.Quit
End If
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(Wscript.Arguments.Item(0))
oBook.SaveAs WScript.Arguments.Item(1), 6
oBook.Close False
oExcel.Quit
WScript.Echo "Done"
아이디어는If InStr(objAtt.DisplayName, ".xls")
만약에.xls
발견된 다음
전환하다.xls
제출하다.csv
그리고
폴더에 파일 저장objAtt.SaveAsFile saveFolder & "" & objAtt.DisplayName
여러 번 시도했지만 작동하지 않았습니다. 변환 스크립트는 두 개의 인수를 사용합니다. 사용법: XlsToCsv SourcePath.xls Destination.csv"
답변1
다른 이름으로 저장하고 싶다면CSV 형식은 FileFormat:=xlCSV를 사용합니다.
예
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)
Debug.Print CVSName
CVSName = saveFolder & "\" & CVSName
Debug.Print CVSName
With objExcel.Workbooks.Open(sPathName)
.SaveAs FileName:=CVSName, _
FileFormat:=xlCSV, _
CreateBackup:=False
.Close SaveChanges:=True
End With
Kill sPathName
objExcel.Quit
End If
Next
답변2
윽!!! 사람들이 코드 조각을 게시하지만 전체 내용을 정리하여 제공하지 않는 경우가 얼마나 싫습니까? :)
어쨌든, 여러분의 결합된 작업 덕분에 하루도 안 되어 작업을 완료할 수 있었습니다. 이제 인터넷에 접속해 보겠습니다. 무료 코드.
추가됨:
- 데이터를 정리하고 Excel 시트에서 처음 10개 행을 삭제하는 논리도 추가했습니다. 데이터 추출이 HEADERS와 함께 제공되므로 이제 CLEAN CSV 파일이 되기 때문입니다.
- 머신에서 LOCAL 설정을 사용하는 인수를 추가했으므로 REGIONAL SETTINGS 아래의 제어판에서 원하는 대로 LIST DELIMITER를 설정할 수 있습니다. 내 시스템 설정에 관계없이 계속 쉼표로 구분되어 저장되었으므로 이제 내 시스템 설정을 존중하고 PIPE를 사용해야 합니다.
- 마지막으로 저는 Office 2016을 사용하여 작업하고 있으며 EXCEL 16 LIBRARY가 참조에 추가되었는지 확인해야 했습니다.
정말 완벽해요!!!
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