반응형

항상 엑셀로 데이터 관리하다보니 실제 xml 에 값이 없더라는

어이없는 경우가 발생


그럼? 펑션으로 해서 있는지를 체크하면되겠넹? ㅋㅋ


예시)AAA.xml 


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<base>

<macro_name>

  <key>2</key>

  <text>으하하하</text>   

</macro_name>

<macro_name>

<key>3</key>

<text>우헤헤헤</text>

</macro_name>

</base>


셀에 2라는 값이 있을때 text 의 값을 얻어와보자


ALT+F11 키눌러서 vba 창에서 도구 -> 참조 에서 Microsoft XML, v3.0 을 활성화 먼저 한다.

(안그러면 xml 안읽히더라고...6.0도 있던데 되는지는 안해봄)






Function xmlfind(key) '함수처럼 사용하기 위해 이름 주고, 셀값 저장)


    Dim XmlDoc As DOMDocument: Dim blnXml As Boolean 'xml 문서형식 지정, 체크값


    Dim strFileName As String: strFileName = "AAA.xml" ' 파일명


    Dim strPath As String: strPath = "c:\"& strFileName 'strPath에 폴더위치와 파일명


    Dim strMsg As String: strMsg = strPath & "파일을 불러오다가 에러가 발생했습니다."


    Set XmlDoc = CreateObject("Microsoft.XMLDom") '오브젝트로 지정


    blnXml = XmlDoc.Load(strPath) '파일있는지 확인


    Dim i As Integer, j As Integer '반복을 위한 변수 설정

    If blnXml = True Then '파일읽었다면?


        With XmlDoc.ChildNodes(1) '문서 끝가지 반복

        For i = 0 To .ChildNodes.Length - 1 '첫번째 노드 key 의 끝까지 반복

            If key = .ChildNodes(i).ChildNodes(0).Text Then 'key 가 셀값과 같은가?

                xmlfind = .ChildNodes(i).ChildNodes(1).Text '해당 노드 값을 반환

                Exit For

            End If

        Next i

        End With

        Set XmlDoc = Nothing 'xml 껏졍

    Else

xmlfind =  strMsg & vbCrLf & Err.Number & " : " _

                   & Err.Description   '오류시 오류사항 리턴

    End If

End Function


언제나 느끼지만 나 이거 왜하고 있는거지....

반응형
반응형

거의 대부분의 어플리케이션이 bom 포함한 파일을 사용하는데!!!

왜!!!!

Bom 없는 파일로 달라고 하는건지!!!!

뭐 설명은 뒤로 하고


Dim objStream As Object '오브젝트를 선언

strPathName ="C:\AAA.xml" '파일 위치와 이름

Set objStream = CreateObject("ADODB.Stream") '오브젝트 생성

objStream.Charset = "UTF-8" '캐릭터셋 설정

objStream.Open '열기!!

objStream.WriteText "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>" & vbCrLf 'xml 헤드에 쓰는건데 따옴표때문에 맨날 찾아서 붙여넣기 한다..ㅜ.ㅜ

objStream.WriteText "<AAA>" & vbCrLf '오브젝트에 글자쓰기!

Dim BinaryStream As Object '오브젝트를 선언

Set BinaryStream = CreateObject("adodb.stream")'오브젝트를 생성

BinaryStream.Type = 1 

BinaryStream.Mode = 3

BinaryStream.Open

objStream.Position = 3 '쓰기 위치

'Strips BOM (붐없애기)

objStream.CopyTo BinaryStream ' 오브젝트스트림 내용을 바이너리스트림으로 복사

objStream.Flush 

objStream.Close '오브젝트스트림 잘가~

BinaryStream.SaveToFile strPathName, 2 '저장

BinaryStream.Close '바이너리스트림도 할꺼 다했으니 잘강~

에 그러니까 objStream에 글자 쓸꺼 다 쓰고 

붐을 제외한 것을 BinaryStream 에 카피 해서 쓰는 방식

와 겁니 해메였구나~

반응형

+ Recent posts