在OpenOffice中转换XML格式的计算(Excel)数据

在OpenOffice中转换XML格式的计算(Excel)数据,xml,openoffice-calc,Xml,Openoffice Calc,我需要将OpenOffice Excel数据转换为XML。我的机器中有ApacheOpenOffice 4.1.1,而不是MS-Office 样本数据。 第一行是标签 CustData FirstName MiddleName LastName EMail PhoneNumber abe x Park abe@mail.com 2323232323 poppy

我需要将OpenOffice Excel数据转换为XML。我的机器中有ApacheOpenOffice 4.1.1,而不是MS-Office

样本数据。 第一行是标签

CustData FirstName  MiddleName  LastName   EMail             PhoneNumber
           abe       x          Park      abe@mail.com       2323232323
           poppy     y          Kaith     Poppy@mail.com     2323232323
需要的结果如下:

<CustData>
        <FirstName>abe</FirstName>  
        <MiddleName>x</MiddleName>
        <LastName>Park</LastName>   
        <EMail>abe@mail.com</EMail>             
        <PhoneNumber>2323232323</PhoneNumber>
</CustData>
<CustData>
       <FirstName>poppy</FirstName>  
       <MiddleName>y</MiddleName>
       <LastName>Kaith</LastName>   
        <EMail>Poppy@mail.com </EMail>             
        <PhoneNumber>2323232323</PhoneNumber>
</CustData>

您可以下载OpenXmlSDK 它包含可帮助您发现excel文档结构的生产力工具,例如:

然后使用任何可用的XSLT教程了解将一种XML结构转换为另一种XML结构的方法

这也可以帮助你:


Openoffice和Libreoffice Calc能够通过XSLT和导出过滤器转换其XML。要使用示例数据执行此操作,请执行以下操作:

首先,创建以下XSL文件并将其另存为SampleDataExportFilter.XSL:

现在打开Calc并选择工具-XML过滤器设置:

选择“新建”并填写“常规”对话框:

在寄存器转换中,选择SampleDataExportFilter.xsl作为要导出的XSLT:

用“确定”确认,用“关闭”确认XML筛选器设置

现在创建以下计算文件:


使用File-Export,您现在应该能够使用文件类型CustData.xml作为xml导出电子表格数据。

绝妙提示!在Calc 6.0.7.3中发现错误,如果两个连续单元格的值相同,它将跳过第二个单元格的值,并使用下一个单元格的值!该行的所有后续值也会被一列移位,并且在该行中是累积的。如果我重新组织列,使并列列中没有相同的字段值,并将.xsl中的单元格引用更改为匹配,则效果良好。

OpenOffice和Microsoft Office格式都已采用XML格式或压缩XML格式。您可能应该将Calc保存的实际XML文档作为输入,并使用XSLT对其进行转换。@MathiasMüller从何处获取Calc保存的实际XML文档,使用XSLT进行转换以及如何使用它?如果举一个openoffice的例子,它对我真的是一个很大的帮助。Calc将您的文档保存为文件系统中的文件。如果在纯文本编辑器中打开这样一个文件,您将立即看到它是一个XML文档。查看这个普通文件,找出感兴趣的数据所在的位置。使用XSLT模板将这些元素作为目标。请注意:我只能为您指出正确的方向,您的问题对于Stackoverflow来说过于模糊和宽泛。使用OpenOffice 3.4进行验证时,我看到一个完美的XML文件在我面前。但当我按下Validate时,它给了我两个错误:文档无效:找不到语法。和文档根元素roor必须匹配DOCTYPE root null。如果我尝试使用它导出,它将失败。你知道会出什么问题吗?OpenOffice 3.4?真正地目前的版本是4.x。OOXML验证器中提到的错误与此无关。语法是文档类型声明DTD。导出的XML当然没有。为什么它应该有?下一个错误是此错误的后续错误。使用oO自己的XML过滤器尝试同样的方法,例如MS Excel 2003 XML。同样的错误。这些错误不会导致导出失败。是的,真的,当我习惯了这些错误时,我讨厌它们更改或删除X。或者,当事情停止运行时,更新软件会无数次地发生在我身上。无论如何,我是用这个方法计算出来的:它和你的例子有些不同,但我得到的结果与我在你的例子中尝试的方法相同。我的例子非常简单,只适用于例子中显示的计算表:B列中的FirstName,C列中的MiddleName,。。。。提供它是为了理解不是现成的解决方案的原则,我只是更改了XSL文件中的第一行命名和相应部分。我认为我甚至不应该改变XSL,因为它寻找的是一个单元格而不是值,xml可以是任何东西。奇怪的是,它确实在验证时显示了一个XML文件,但它不会保存它。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" exclude-result-prefixes="office table text">

 <xsl:template match="/">
  <root>
   <xsl:apply-templates select="/*/office:body" />
  </root>
 </xsl:template>

 <xsl:template match="office:body">
  <xsl:apply-templates />
 </xsl:template>

 <xsl:template match="office:spreadsheet">
  <xsl:apply-templates />
 </xsl:template>

 <xsl:template match="office:spreadsheet/table:table">

   <xsl:for-each select="table:table-row[position() &gt; 1]">

   <CustData>
    <FirstName><xsl:value-of select="table:table-cell[2]/text:p" /></FirstName> 
    <MiddleName><xsl:value-of select="table:table-cell[3]/text:p" /></MiddleName>
    <LastName><xsl:value-of select="table:table-cell[4]/text:p" /></LastName>   
    <EMail><xsl:value-of select="table:table-cell[5]/text:p" /></EMail>            
    <PhoneNumber><xsl:value-of select="table:table-cell[6]/text:p" /></PhoneNumber>
   </CustData>

   </xsl:for-each>

 </xsl:template>
</xsl:stylesheet>