为什么Excel 2010在导出到XML时不允许我使用嵌入式元素

时间:2018-01-30 13:27:07

标签: xml excel xsd

我试图让excel输出一个特定的xml格式,其中有一个元素嵌入在另一个元素中。见下文。但是,excel只允许我导出为xml。如果我没有在Formula元素中嵌入Process元素,我可以导出为xml,但我需要嵌入它们以与最终软件进行通信。下面是我需要输出的xml和我输入的xsd。有什么我想念的吗?

需要XML输出:

<Formula>
<Name>My Formula</Name>
<Process>                             
  <Ing>90000001</Ing>        
  <ReqAmount>14</ReqAmount>                               
</ProcessInput>
<Process>
  <Ing>90000002</Ing>
  <ReqAmount>5</ReqAmount>
</Process> </Formula>

Process块需要无限重复

XSD:

<xs:element name="Formula">
    <xs:complexType>
        <xs:choice>
        <xs:element name="Name" type="xs:string"/>
            <xs:element name = "Process" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                <xs:sequence>
                    <xs:element name="Ing" type="xs:string"/>
                    <xs:element name="ReqAmount" type="xs:double"/>
                </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:choice>  
    </xs:complexType>
</xs:element>

我得到的错误是“无法保存或导出XML数据。此工作簿中的XML映射不可导出。”

谢谢!

1 个答案:

答案 0 :(得分:0)

如果Excel工作表实际上只包含一个公式,那么以下内容将起作用:

XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Formula">
    <xs:complexType>
      <xs:sequence>
        <xs:element type="xs:string" name="Name"/>
        <xs:element name="Process" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:int" name="Ing"/>
              <xs:element type="xs:int" name="ReqAmount"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Excel中:

enter image description here

如您所见,字段Name已被拖至A1,而Process已被拖至A2

这是可导出的,并导致XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Formula>
    <Name>MyFormula</Name>
    <Process>
        <Ing>90000001</Ing>
        <ReqAmount>14</ReqAmount>
    </Process>
    <Process>
        <Ing>90000002</Ing>
        <ReqAmount>5</ReqAmount>
    </Process>
    <Process>
        <Ing>90000003</Ing>
        <ReqAmount>123</ReqAmount>
    </Process>
    <Process>
        <Ing>90000004</Ing>
        <ReqAmount>456</ReqAmount>
    </Process>
</Formula>