用于Mac Excel的XLS到XMLmacros

我需要将电子表格转换为基本的XML格式。 电子表格如下所示: 在这里输入图像说明

我希望电子表格中的每一行在XML上看起来像这样:

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

有什么build议么?

更新:我读了几件事,并按@ Sancho.sbuild议的代码我已经使用了下面的macros:

 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 

我必须使用Print而不是Debug.Print,因为不允许立即窗口显示超过200行,而且比这些输出要less得多。 使用这个代码,它创build了test.txt文件,但是只把最后一行放到文件中,而不是所有的文件中。 它有什么问题?

这个代码应该适合你。 这几乎是不言自明的,适应应该是容易的。 为了用其他操作补充这些代码,如果您需要检查给定任务的(近似)代码是什么,您可能会发现logging一个macros是有帮助的。

 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) Debug.Print "<item>" Debug.Print " <title>" & cl.Text & "</title>" Debug.Print " <address>" & cl.Offset(0, 2).Text & "</address>" Debug.Print " <phone>" & cl.Offset(0, 1).Text & "</phone>" Debug.Print " <cell>" & cl.Offset(0, 3).Text & "</cell>" Debug.Print "</item>" End Sub 

然后你可以从立即窗口复制输出。

祝你好运。


编辑要写入文件而不是立即窗口,请使用以下(也不言自明)(请参阅如何从Excel VBA可靠地写入文本文件? )

 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 

还有另一种select(请参阅如何使用VBA创build和写入到txt文件 ):

 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 

如果你的目标是获得转换后的文本,而且你不需要使用VBA(你没有指定这种情况),那么你可以导出你的工作表为csv,并使用另一个程序(比如在Objective C )进行转换。

它会带来更多的点击,但如果您想“升级”您的工作表或为将来获得XML而进行的操作,那么您可能会对此function感到更加舒适,这是完全可行的。