<input type="file" /> 을 이용해 엑셀파일을 업로드하는 형태로 데이터를 업로드하는 웹페이지가 있을 때,

브라우저를 열어서 웹페이지에 방문하지 않고 엑셀에서 매크로로 업로드하는 방법.


현재 Sheet의 데이터가 있는 Range의 데이터를 전부 모아서,

PostData를 파일업로드 규약에 맞게 구성하여 WinHTTP 로 요청.


로그인이 필요할 경우 다음 페이지 참조: http://bloodguy.tistory.com/906


Option Explicit

Private Sub UploadExcelData()
    Dim i, j As Integer
    Dim BoundaryStr As String
    Dim ExcelData As String
    Dim Delimiter As String
    Dim PostData As String
    Dim WinHTTP As Object
        
    '업로드 할 데이터 추출 (현재 Sheet에서 데이터가 있는 모든 영역)
    For i = 1 To ActiveSheet.UsedRange.Rows.Count
        For j = 1 To ActiveSheet.UsedRange.Columns.Count
            If j = 1 Then
                Delimiter = ""
            Else
                Delimiter = ","
            End If
        
            ExcelData = ExcelData & Delimiter & ActiveSheet.UsedRange.Cells(i, j)
        Next j
        
        ExcelData = ExcelData & Chr(10)
    Next i
    
    'POST 전송값 세팅
    BoundaryStr = "WebKitFormBoundary4r2ZaQBHYAYL1ILm"
    PostData = "------" & BoundaryStr & Chr(13) & Chr(10)
    PostData = PostData & "Content-Disposition: form-data; name=""csv_file""; filename=""upload_data.csv""" & Chr(13) & Chr(10)
    PostData = PostData & "Content-Type: application/vnd.ms-excel" & Chr(13) & Chr(10) & Chr(13) & Chr(10)
    PostData = PostData & ExcelData & Chr(13) & Chr(10)
    PostData = PostData & "------" & BoundaryStr & "--" & Chr(13) & Chr(10)
            
    '업로드 시도
    Set WinHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")
    WinHTTP.Open "POST", "http://DOMAIN.com/excel_upload.php"
    WinHTTP.SetRequestHeader "Content-Type", "multipart/form-data; boundary=----" & BoundaryStr
    WinHTTP.Send PostData
    
    '결과 출력
    Debug.Print WinHTTP.ResponseText

    WinHTTP = Nothing
End Sub









Posted by bloodguy
,