&引用;“非规范化数据”;尝试从Excel导出到XML时

&引用;“非规范化数据”;尝试从Excel导出到XML时,xml,excel,Xml,Excel,我有这个问题已经很久了。 基本上,我有一个需要导出到XML文件的各种产品的Excel列表。当我将第一个XML元素映射到第一行数据(本例中是一个重复出现的客户编号)时,我得到了“非规范化数据”错误。现在,据我所知,这意味着Excel不满意每一行的客户编号都相同: (LKZ行的格式为纯文本,但将格式更改为数字似乎也无济于事。) 将数据复制到新Excel工作表确实有效,但仅适用于单行。 因此,导出它将只导出一行数据 我不确定我们提供的XML方案是否完全正确: 我尝试将maxOccurs设置为unb

我有这个问题已经很久了。 基本上,我有一个需要导出到XML文件的各种产品的Excel列表。当我将第一个XML元素映射到第一行数据(本例中是一个重复出现的客户编号)时,我得到了“非规范化数据”错误。现在,据我所知,这意味着Excel不满意每一行的客户编号都相同:

(LKZ行的格式为纯文本,但将格式更改为数字似乎也无济于事。)

将数据复制到新Excel工作表确实有效,但仅适用于单行。 因此,导出它将只导出一行数据

我不确定我们提供的XML方案是否完全正确:


我尝试将maxOccurs设置为unbounded,但我要么做得不对,要么在这方面走错了方向。(如果有人愿意举例说明maxOccurs的外观,我们将不胜感激。)

看来没有人真正有答案。不能怪你们

最后,我编写了一个宏来创建一个全新的XML文件,从而粗暴地解决了这个问题。如果有人在乎,这里是代码。请记住,我通常不使用VBA,所以它可能不是超优雅的

Sub Text()

Dim arrHeader() As String, Max As Integer, Col As Integer, arrContent() As String, Row As Integer
Dim filesys, testfile, XTab As String

STab = "    "
Max = 1

Set filesys = CreateObject("Scripting.FileSystemObject")
Set testfile = filesys.CreateTextFile("C:\Users\edvpr\Desktop\test.xml", True)

testfile.WriteLine "<?xml version=""1.0"" encoding=""UTF-8""?>"
testfile.WriteLine "<ottopartner xmlns=""http://www.ottogroupb2b.com/ottopartner"">"

Do
    Max = Max + 1
Loop Until Cells(1, Max) = ""
Col = 1
ReDim arrHeader(1 To Max - 1) As String
Do
    arrHeader(Col) = Cells(1, Col)
    Col = Col + 1
Loop Until Col = Max

Row = 2
ReDim arrContent(1 To Max - 1) As String
Do
    Col = 1
    If Row = 2 Then
    Do
        arrContent(Col) = Cells(Row, Col)

        If arrContent(Col) <> "" And arrHeader(Col) = "LKZ" Then
            testfile.WriteLine "<" + Trim(arrHeader(Col)) + ">" + Trim(arrContent(Col)) + "</" + Trim(arrHeader(Col)) + ">"
            testfile.WriteLine "<Styles>"
        End If
    Col = Col + 1
    Loop Until Col = Max
    End If

    Col = 1

    Do
        arrContent(Col) = Cells(Row, Col)
        If Trim(arrContent(Col)) <> "" And Trim(arrHeader(Col)) <> "LKZ" Then
            If Trim(arrHeader(Col)) = "OrderQuantityDefault" Then
                XTab = STab + STab
                testfile.WriteLine XTab + "<Item>"
            End If

            If Trim(arrHeader(Col)) = "InvoicingStartDate" Then
                XTab = STab + STab + STab
                testfile.WriteLine XTab + "<SKU>"
            End If

            If Trim(arrHeader(Col)) = "StyleNo" Then
                If Row > 2 Then
                    testfile.WriteLine XTab + "</SKU>"
                    XTab = STab + STab
                    testfile.WriteLine XTab + "</Item>"
                    XTab = STab
                    testfile.WriteLine XTab + "</Style>"
                End If

                XTab = STab
                testfile.WriteLine XTab + "<Style>"
            End If

            testfile.WriteLine XTab + STab + "<" + Trim(arrHeader(Col)) + ">" + Trim(arrContent(Col)) + "</" + Trim(arrHeader(Col)) + ">"
        End If
        Col = Col + 1
    Loop Until Col = Max

    Row = Row + 1

Loop Until Cells(Row, 1) = ""
testfile.WriteLine "</SKU>"
testfile.WriteLine "</Item>"
testfile.WriteLine "</Style>"
testfile.WriteLine "</Styles>"
testfile.WriteLine "</ottopartner>"

testfile.Close

End Sub
子文本()
Dim arrHeader()作为字符串,Max作为整数,Col作为整数,arrContent()作为字符串,行作为整数
Dim filesys、testfile、XTab作为字符串
STab=“”
最大值=1
设置filesys=CreateObject(“Scripting.FileSystemObject”)
设置testfile=filesys.CreateTextFile(“C:\Users\edvpr\Desktop\test.xml”,True)
testfile.WriteLine“”
testfile.WriteLine“”
做
最大值=最大值+1
循环直到单元格(1,最大值)=“”
Col=1
作为字符串重拨arrHeader(1到最大值-1)
做
arrHeader(Col)=单元格(1,Col)
Col=Col+1
循环直到Col=Max
行=2
将内容(1到最大值-1)重拨为字符串
做
Col=1
如果行=2,则
做
arrContent(Col)=单元格(行、列)
如果arrContent(Col)“”和arrHeader(Col)=“LKZ”,则
testfile.WriteLine“+修剪(arrContent(Col))+”
testfile.WriteLine“”
如果结束
Col=Col+1
循环直到Col=Max
如果结束
Col=1
做
arrContent(Col)=单元格(行、列)
如果Trim(arrContent(Col))“”和Trim(arrHeader(Col))“LKZ”,则
如果Trim(arrHeader(Col))=“OrderQuantityDefault”,则
XTab=刺+刺
testfile.WriteLine XTab+“”
如果结束
如果Trim(arrHeader(Col))=“发票开始日期”,则
XTab=刺+刺+刺
testfile.WriteLine XTab+“”
如果结束
如果Trim(arrHeader(Col))=“StyleNo”,则
如果行>2,则
testfile.WriteLine XTab+“”
XTab=刺+刺
testfile.WriteLine XTab+“”
XTab=STab
testfile.WriteLine XTab+“”
如果结束
XTab=STab
testfile.WriteLine XTab+“”
如果结束
testfile.WriteLine XTab+STab+“”+Trim(arrContent(Col))+“”
如果结束
Col=Col+1
循环直到Col=Max
行=行+1
循环直到单元格(第1行)=“”
testfile.WriteLine“”
testfile.WriteLine“”
testfile.WriteLine“”
testfile.WriteLine“”
testfile.WriteLine“”
testfile.Close
端接头
宏从左到右读取第一行以创建标记,然后从上到下用其余数据填充标记。它还缩进XML,因为OCD