2009-05-29 7 views
5

J'ai un modèle XSLT qui est appliqué à un fichier de données XML. Le modèle génère un fichier XML de feuille de calcul Excel.Appliquer XSLT sur XML avant d'importer dans Excel

Tout fonctionne merveilleux sauf pour un problème mineur ....

Quand j'ouvre la feuille de calcul dans Excel, il la traite comme une importation XML et me demande si la feuille de style doit être appliqué. Je voudrais l'avoir pour qu'il applique automatiquement tout modèle XSLT associé au fichier.

est Ci-dessous un exemple de code .... merci d'avance ....

document XML ...

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="spreadstyle.xsl"?> 

<ResponseBody> 
    <ActivityDetails> 
     <ActivityDetail> 
      <TranCodeDesc>LateChargeAssessment</TranCodeDesc> 
     </ActivityDetail> 
    </ActivityDetails> 
</ResponseBody> 

modèle XSLT ...

<?xml version="1.0"?> 
<?mso-application progid="Excel.Sheet"?> 

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 


    <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" 
    xmlns:o="urn:schemas-microsoft-com:office:office" 
    xmlns:x="urn:schemas-microsoft-com:office:excel" 
    xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" 
    xmlns:html="http://www.w3.org/TR/REC-html40"> 

    <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> 
     <Author>tbarbedo</Author> 
     <Created>2009-05-29T18:21:48Z</Created> 
     <Version>12.00</Version> 
    </DocumentProperties> 
    <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> 
     <WindowHeight>8895</WindowHeight> 
     <WindowWidth>18015</WindowWidth> 
     <WindowTopX>0</WindowTopX> 
     <WindowTopY>105</WindowTopY> 
     <ProtectStructure>False</ProtectStructure> 
     <ProtectWindows>False</ProtectWindows> 
    </ExcelWorkbook> 
    <Styles> 
     <Style ss:ID="Default" ss:Name="Normal"> 
     <Alignment ss:Vertical="Bottom"/> 
     <Borders/> 
     <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/> 
     <Interior/> 
     <NumberFormat/> 
     <Protection/> 
     </Style> 
    </Styles> 
    <Worksheet ss:Name="Sheet1"> 
     <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="5000" x:FullColumns="1" 
     x:FullRows="1" ss:DefaultRowHeight="15"> 
      <Row><Cell><Data ss:Type="String">Transaction Code Descriptions (MAGIC) </Data></Cell></Row> 
      <xsl:for-each select="ResponseBody/ActivityDetails/ActivityDetail">  
       <Row> 
        <Cell> 
         <Data ss:Type="String"> 
          <xsl:value-of select="TranCodeDesc" /> 
         </Data> 
        </Cell> 

       </Row> 
      </xsl:for-each> 

     </Table> 
     <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> 
     <PageSetup> 
     <Header x:Margin="0.3"/> 
     <Footer x:Margin="0.3"/> 
     <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/> 
     </PageSetup> 
     <Selected/> 
     <Panes> 
     <Pane> 
     <Number>3</Number> 
     <ActiveRow>1</ActiveRow> 
     </Pane> 
     </Panes> 
     <ProtectObjects>False</ProtectObjects> 
     <ProtectScenarios>False</ProtectScenarios> 
     </WorksheetOptions> 
    </Worksheet> 
    </Workbook> 

</xsl:template> 
</xsl:stylesheet> 
+0

Ce n'est pas vraiment une question XSLT, mais une question Excel ... – 0x6adb015

Répondre

3

De ma compréhension, il n'y a aucun moyen de contourner le Import XML ... dialo g étant montré. La raison est expliquée dans cet article MSDN (Transform XML Files with XSLT When Importing into Microsoft Excel 2002):

XML est un langage de balisage utilisé pour décrire des données structurées (par exemple que, dans une feuille de calcul) afin qu'il puisse être lu par une variété d'applications. Les concepteurs peuvent créer des éléments XML personnalisés, permettant la définition, la transmission, la validation et l'interprétation des données entre les applications et entre les organisations. Cette polyvalence offre de nombreuses possibilités d'échange de données, mais présente également au moins un défi inhérent. En manipulant les éléments d'un document XML, les concepteurs peuvent créer n'importe quel nombre de dimensions d'éléments imbriqués dans un document. Ces relations parent/enfant peuvent mener à l'ambiguïté dans le paradigme bidimensionnel ligne-et-colonne d'une feuille de calcul Excel.

Pour faire face à cette ambiguïté, Excel oblige un format à toutes les données XML qu'il reçoit, à moins que les données proviennent d'une feuille de style qui prédéfinit un autre format . Ce format forcé est créé en utilisant un algorithme d'aplatissement à pour remplir les lignes et les colonnes qui comprennent une feuille de calcul. Pourtant, alors que ce format est efficace pour forcer données multidimensionnelles dans un format bidimensionnel , il ne présente pas toujours les données dans le format optimal pour un lecteur humain.

Comment Excel sait-il quand utiliser soit l'algorithme d'aplatissement, soit la feuille de style XSLT ? Lorsque Excel s'ouvre ou importe un fichier de données XML, il recherche un élément dans le fichier qui pointe vers une feuille de style XSLT. Si cet élément est présent, Excel affiche une boîte de dialogue qui vous invite à appliquer la feuille de style ou à ouvrir le fichier sans feuille de style.

3

si vous ajoutez cette instruction dans la feuille xsl:

<xsl:template match="/"> 
    <xsl:processing-instruction name="mso-application"> 
    <xsl:text>progid="Excel.Sheet"</xsl:text> 
    </xsl:processing-instruction> 

.... excel fonctionnera bien

+0

Cela ne fonctionnera pas. J'ai déjà dans la ligne .xml avec . Et ce code xslt ne fait que créer cette chaîne. Invite "Import XML" apparaît quand même :( –