<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
'VisualBasic' 카테고리의 다른 글
[VBA] WinHTTP로 POST 전송시 데이터를 EUC-KR(CP949)로 전송하기 (WinHTTP, System Default Code Page) (0) | 2014.11.11 |
---|---|
[VBA] 선택된 rows 번호 가져오기 (0) | 2014.11.04 |
[VBA] WinHTTP로 로그인 세션(PHPSESSID) 유지하면서 웹페이지 요청하기 (0) | 2014.11.02 |
[VBA] UrlEncode 함수 (0) | 2014.11.02 |
[VBA] HTMLDocument를 사용하기 위한 세팅 (0) | 2014.11.02 |