2013-09-27 62 views
0

我有XML格式的Excel格式的xls文件(http://www.microsoft.com/en-us/download/confirmation.aspx?id=101),如何使用xslt转换为HTML或如何生成xslt文件到Excel?如何将Excel XML转换为使用xslt的HTML?

+0

如果您正在寻找对于与任何文件一起工作的单个XSLT,我担心这可能会非常复杂。但是,如果您在某些情况下只需要它,这可能是可能的,但您至少需要编辑您的问题以显示Excel XML样本以及您希望输出的HTML样本。谢谢! –

回答

0

XSLT

<?xml version="1.0"?> 

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
       version="1.0"> 
<xsl:output method="html"/> 
<xsl:template match="/"> 
<xsl:element name="style"> 
    <xsl:for-each select="ss:Workbook/ss:Styles/ss:Style"> 
    #<xsl:value-of select="@ss:ID"/> 
    { 
     <xsl:if test="ss:Alignment/@ss:Horizontal"> 
      text-align: <xsl:value-of select="ss:Alignment/@ss:Horizontal"/>; 
     </xsl:if> 
     <xsl:if test="ss:Alignment/@ss:Vertical"> 
      vertical-align: <xsl:value-of select="ss:Alignment/@ss:Vertical"/>; 
     </xsl:if> 
     <xsl:if test="ss:Alignment/@ss:Vertical"> 
      vertical-align: <xsl:value-of select="ss:Alignment/@ss:Vertical"/>; 
     </xsl:if> 
     <xsl:if test="ss:Font/@ss:Bold=1"> 
      font-weight: bold; 
     </xsl:if> 
     <xsl:if test="ss:Font/@ss:Color"> 
      color:<xsl:value-of select="ss:Font/@ss:Color"/>; 
     </xsl:if> 

     <xsl:if test="ss:Font/@ss:StrikeThrough=1"> 
      text-decoration:line-through 
     </xsl:if> 
     <xsl:if test="ss:Font/@ss:Underline='Single'"> 
      text-decoration:underline 
     </xsl:if> 
     <xsl:if test="ss:Interior/@ss:Color"> 
      background-color:<xsl:value-of select="ss:Interior/@ss:Color"/>; 
     </xsl:if> 
     <xsl:for-each select="ss:Borders/ss:Border"> 
      <xsl:if test="@ss:Color"> 
       border-<xsl:value-of select="@ss:Position"/>-color:<xsl:value-of select="@ss:Color"/>; 
      </xsl:if> 
      <xsl:if test="@ss:Weight"> 
       border-<xsl:value-of select="@ss:Position"/>-width:<xsl:value-of select="@ss:Weight"/>px; 
      </xsl:if> 
      <xsl:if test="@ss:LineStyle"> 
       border-<xsl:value-of select="@ss:Position"/>-style:<xsl:value-of select="@ss:LineStyle"/>; 
      </xsl:if> 
     </xsl:for-each> 
} 
    </xsl:for-each> 
</xsl:element> 
    <xsl:element name="table"> 
     <xsl:for-each select="ss:Workbook/ss:Worksheet/ss:Table/ss:Row"> 
      <xsl:element name="tr"> 

       <xsl:for-each select="ss:Cell"> 
        <xsl:element name="td"> 
         <xsl:attribute name="id"> 
          <xsl:value-of select="@ss:StyleID"/> 
         </xsl:attribute> 
         <xsl:if test="@ss:MergeAcross"> 
          <xsl:attribute name="colspan"> 
           <xsl:value-of select="@ss:MergeAcross+1"/> 
          </xsl:attribute> 
         </xsl:if> 
         <xsl:value-of select="ss:Data"/> 
        </xsl:element> 
       </xsl:for-each> 
      </xsl:element> 
     </xsl:for-each> 
    </xsl:element> 
</xsl:template> 

0

您不能使用XSLT从EXCEL生成HTML。您必须先将Excel数据转换为XML格式,然后使用XSLT生成HTML。

要从EXCEL获得XML,您可以使用Java:http://jexcelapi.sourceforge.net/ 我相信它也可以在其他编程语言中使用。

你可以使用下面的Java代码,然后到你的EXCEL转换成XML:

public static void convertXLS() { 

    File file = new File("C:/tesco_invoices_zwe02.xls"); 
    Workbook wb; 
    try { 
     wb = Workbook.getWorkbook(file); 
     String xmldata = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n" 
       + "<ns0:" + "bla" + " " + "xmlns:ns0=\"" + "bla" + "\">"; 
     Cell[] cells; 
     Cell[] cellNames; 
     cellNames = wb.getSheet(0).getRow(0); 
     for (int j = 1; j < wb.getSheet(0).getRows(); j++) { 
      xmldata = xmldata + "<Recordset>"; 
      cells = wb.getSheet(0).getRow(j); 
      for (int i = 0; i < wb.getSheet(0).getColumns(); i++) { 

       String cellcontent = cells[i].getContents(); 
       String cellcontent2 = cellcontent.trim(); 

       xmldata = xmldata 
         + "<"+ cellNames[i].getContents()+ ">"+ cellcontent2 + "</" + cellNames[i].getContents() + ">" + "\n"; 
      } 
      xmldata = xmldata + "</Recordset>"; 

     } 

     xmldata = xmldata + "</ns0:" + "bla" + ">"; 
     wb.close(); 
     System.out.println(xmldata); 
    } catch (BiffException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

最佳regarsd, 彼得

+0

我相信问题是指Excel电子表格XML,这是Microsoft Excel在保存电子表格时可以保存的格式。因为它是XML,所以在其上运行XSLT是完全可行的,尽管它可能不一定是简单的XSLT。 –

+0

你好,蒂姆,你是对的。我误解了希望以EXCEL格式* .xls格式存在数据的问题。 OP应该给我们一个他的输入和期望输出的例子。 – Peter