2013-12-10 7 views
0

스프레드 시트를 기본 XML 형식으로 변환해야합니다. 스프레드 시트는 다음과 같습니다Mac Excel 용 XLS to XML 매크로

<item> 
    <title>Directory Name</title> 
    <address>Address, City, State</address> 
    <phone>Phone</phone> 
    <cell>Cell Phone</cell> 
</item> 

어떤 제안 : enter image description here

은 내가 XML을 같이 할 수있는 스프레드 시트에서 각 행을 원하십니까?

업데이트 : 내가 읽은 몇 가지 당, 그리고 @ Sancho.s 제안 코드마다 나는 다음과 같은 매크로를 사용했다 :

Sub xls2xml() 
    Dim rng1 As Range, rng2 As Range, cl As Range 
    Set rng1 = Range("A2") 
    Set rng1 = Range(rng1, rng1.End(xlDown)) 
    For Each cl In rng1 
     Call dump_xml_line(cl) 
    Next cl 

End Sub 

Sub dump_xml_line(cl As Range) 
Dim n As Integer 

n = FreeFile() 
Open "C:\Users\Me\test.txt" For Output As #n 


    Print #n, "<item>" 
    Print #n, " <title>" & cl.Text & "</title>" 
    Print #n, " <address>" & cl.Offset(0, 2).Text & "</address>" 
    Print #n, " <phone>" & cl.Offset(0, 1).Text & "</phone>" 
    Print #n, " <cell>" & cl.Offset(0, 3).Text & "</cell>" 
    Print #n, "</item>" 
    Close #n 
End Sub 

내가 대신을 Debug.Print의 인쇄를 사용했다 직접 실행 창 ISN 때문에 200 라인 이상을 보여줄 수는 없으며, 이것은 모든 것의 산출량보다 훨씬 적습니다. 이 코드를 사용하여 test.txt 파일을 생성하지만 모든 행 대신 파일의 마지막 행만 파일에 저장합니다. 그게 뭐가 잘못 되었 니?

+0

시도한 것을 게시하십시오. –

+0

어떻게해야할지 모르겠으므로 아무 것도 시도하지 않았습니다. 이런 일은 한번도하지 않았습니다. 나는 그것을 할 수 있다고 들었지만 어디서부터 시작해야할지 전혀 모른다. @ sancho.s. 그래서 제가 도움을 요청했습니다. – user717452

+0

익숙한 프로그래밍 언어는 무엇입니까? –

답변

2

이 코드는 유용 할 것입니다. 꽤 자명하며 적응이 쉬워야합니다. 이 코드를 다른 작업으로 보완하기 위해 주어진 작업에 대한 (대략적인) 코드가 무엇인지 확인해야하는 경우 매크로를 기록하는 것이 도움이 될 수 있습니다.

그러면 직접 실행 창에서 출력을 복사 할 수 있습니다.

행운을 비네.


편집 사용 다음 (또한 자명)

Sub xls2xml_2() 
    Dim rng1 As Range, rng2 As Range, cl As Range 
    Set rng1 = Range("A2") 
    Set rng1 = Range(rng1, rng1.End(xlDown)) 

    Dim strPath As String 
    strPath = "test2.txt" 
    Dim fnum As Integer 
    fnum = FreeFile() 
    Open strPath For Output As #fnum 

    For Each cl In rng1 
     Call write_xml_line_2(cl, fnum) 
    Next cl 

    Close #fnum 
End Sub 

Sub write_xml_line_2(cl As Range, fnum As Integer) 
    Print #fnum, "<item>" 
    Print #fnum, " <title>" & cl.Text & "</title>" 
    Print #fnum, " <address>" & cl.Offset(0, 2).Text & "</address>" 
    Print #fnum, " <phone>" & cl.Offset(0, 1).Text & "</phone>" 
    Print #fnum, " <cell>" & cl.Offset(0, 3).Text & "</cell>" 
    Print #fnum, "</item>" 
End Sub 

는 또 다른 옵션 (How to create and write to a txt file using VBA 참조)가 (How can I write to a text file reliably from Excel VBA? 참조) 대신 직접 실행 창의 파일에 쓸 :

Sub xls2xml_1() 
    Dim rng1 As Range, rng2 As Range, cl As Range 
    Set rng1 = Range("A2") 
    Set rng1 = Range(rng1, rng1.End(xlDown)) 

    Dim strPath As String 
    strPath = "test1.txt" 
    Dim fso As Object 
    Set fso = CreateObject("Scripting.FileSystemObject") 
    Dim oFile As Object 
    Set oFile = fso.CreateTextFile(strPath) 

    For Each cl In rng1 
     Call write_xml_line_1(cl, oFile) 
    Next cl 

    oFile.Close 
    Set fso = Nothing 
    Set oFile = Nothing 
End Sub 

Sub write_xml_line_1(cl As Range, oFile As Object) 
    oFile.WriteLine "<item>" 
    oFile.WriteLine " <title>" & cl.Text & "</title>" 
    oFile.WriteLine " <address>" & cl.Offset(0, 2).Text & "</address>" 
    oFile.WriteLine " <phone>" & cl.Offset(0, 1).Text & "</phone>" 
    oFile.WriteLine " <cell>" & cl.Offset(0, 3).Text & "</cell>" 
    oFile.WriteLine "</item>" 
End Sub 
+0

좋아, 정말 바보 같은 느낌이지만, 문제가있다. Mac 용 Microsoft Excel 2008에서 스프레드 시트를 엽니 다. 도구, 매크로를 클릭합니다. 이름을 지어주는 상자와 다른 상자를 봅니다. 다른 상자는 그 안에 클릭 할 수 없으며 Cancel을 제외한 모든 것은 회색으로 표시됩니다. 무슨 일이야? – user717452

+0

@ user717452 - 모듈을 삽입해야합니다 (Alt F11을 사용하여 VBA 편집기를 열고 프로젝트를 마우스 오른쪽 단추로 클릭 한 다음 삽입, 모듈). 코드를 새 모듈에 붙여 넣으십시오. 그런 다음'xls2xml' 안에 커서를 위치시키고 sub (F5)를 실행하십시오. MAC이 아닌 PC를 가지고 있지만 같은 것이어야합니다. –

+0

나는 [this] (http://spreadsheets.about.com/od/advancedexcel/ss/080703macro2007.htm)과 같은 것을 추천한다. –

0

귀하의 목표는 변환 된 텍스트를 얻는 것이고, ory VBA를 사용하려면 (이 경우를 지정하지 않았습니다.) 워크 시트를 CSV로 내보내고 다른 프로그램 (예 : Objective C)을 사용하여 변환을 수행 할 수 있습니다.

몇 번의 클릭 만 필요하지만 미래에 XML을 얻으려는 워크 시트 나 조작을 "업그레이드"하려면이 옵션을 사용하는 것이 좋습니다. 기능의.