본인의 업무는 일주일에 신규 매장에 관한 인폼을 정리하여 구글 주소록에 업데이트 해야 하는 업무를 한다.
그러나 구글 주소록에서 [내보내기]로 받은 파일을 바로 열때는 인코딩 문제로 인해 한글 깨짐 현상이 발생한다.
구글링을 해도 단순하게 메모장으로 구글주소록을 연 후 [다른이름으로저장] 옵션에서 변경하여 인코딩문제를 해결하는 방법뿐이었다.
VBA 코드를 통해서 이를 해결해 보려했지만 통곡의 코드벽에서 막혀 새벽을 날린 후 아침에 푸념섞인 투정(?)을 하자 나의 히어로 갓엑사남님이 응답주셨다.
은근 츤데레 매력 있음.....등치는 산만해 가지고...
구마적 스펙보다 훨씬 오바스펙임 우리 엑사남님은...
더보기
Option Explicit
Sub OpenCsv()
Dim Rs As Object: Set Rs = CreateObject("ADODB.Recordset")
Dim FSO As Object: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim strFilter$, strPath$, strFileName$
Dim strSQL$, strConn$
Dim strTB$, strDB$
With Application.FileDialog(msoFileDialogFilePicker) '= 파일선택 대화창
.Filters.Clear '= 기존 파일 필터링 삭제
.Filters.Add "CSV Files (*.csv)", "*.csv" '= CSV 파일만 필터링
.Show '= 파일 대화창 오픈
If .SelectedItems.Count = 0 Then '= 취소시 종료
Exit Sub
Else
strPath = .SelectedItems(1) '= 선택하면 Full 경로 저장
End If
End With
strFileName = FSO.GetFileName(strPath) '= Fso 통해서 파일명만 담아라
strDB = Replace(strPath, strFileName, "") '= 리플레이스를 통해서 폴더명만 담아라
Sheets("주소록").Cells.ClearContents '= 주소록시트 전체영역 삭제
strTB = strFileName '= 파일명을 strTB에 담아라
strSQL = "SELECT * FROM [" & strTB & "]" '= 파일테이블에서 모든 열을 가져와라
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strDB & ";" & _
"Extended Properties=""text;HDR=no;FMT=Delimited(,);CharacterSet=65001"";"
Rs.Open strSQL, strConn '= Sql 접속하여 쿼리를 실행해라
Sheets("주소록").[a1].CopyFromRecordset Rs '= 복사한 레코드셋을 출력해라
Rs.Close
Set Rs = Nothing '= 레코드셋 초기화
Sheets("주소록").Activate
MsgBox "주소록 추출을 완료했습니다."
End Sub
sql 전문가답게 sql로 야무지게 해주셨다. 인코딩문제는 strConn에서 CharacterSet=65001이 핵심이다. 저게 안되서 계속 한글깨짐 현상이 발생하였다.
늘 생각하는거지만 코드 한줄이 완성코드와 미완성코드를 가르는 한줄이다.
'ADO' 카테고리의 다른 글
[ADO] 개봉된 영화 중 분기별 매출과 개봉 영화수를 구해보자 (0) | 2022.06.02 |
---|---|
[ADO] sql : Pivot 함수를 이용하자 (0) | 2022.06.01 |
[ADO] mySql에 연결하여 데이터 가져오기 (0) | 2022.06.01 |
Early binding 이제 자동으로..(Feat.Guid) (0) | 2022.05.03 |
댓글