2009-05-29 9 views
5

में आयात करने से पहले एक्सएमएल पर XSLT लागू करें मैं डेटा की एक XML फ़ाइल पर लागू होने वाले एक XSLT टेम्पलेट है। टेम्पलेट एक एक्सेल स्प्रेडशीट एक्सएमएल फ़ाइल उत्पन्न करता है।एक्सेल

सब कुछ एक मामूली मुद्दा .... के अलावा अद्भुत काम करता है

जब मैं Excel में स्प्रेडशीट खोलते हैं, तो यह एक XML आयात के रूप में व्यवहार करता है और कि क्या स्टाइलशीट लागू किया जाना चाहिए मुझे पूछता है। मैं इसे प्राप्त करना चाहता हूं ताकि यह फ़ाइल से जुड़े किसी भी एक्सएसएलटी टेम्पलेट को स्वचालित रूप से लागू कर सके।

नीचे कुछ नमूना कोड .... अग्रिम धन्यवाद ....

एक्सएमएल दस्तावेज़ ...

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

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

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

यह वास्तव में एक एक्सएसएलटी प्रश्न नहीं है, लेकिन एक्सेल एक ... – 0x6adb015

उत्तर

3

मेरी समझ से, वहाँ आयात एक्सएमएल ... dialo के आसपास कोई रास्ता नहीं है जी दिखाया जा रहा है। कारण यह MSDN लेख (Transform XML Files with XSLT When Importing into Microsoft Excel 2002) में समझाया गया है:

एक्सएमएल मार्कअप संरचित डेटा (जैसे कि किसी कार्यपत्रक में के रूप में) का वर्णन इतना है कि यह आवेदन पत्र की एक किस्म द्वारा पढ़ा जा सकता के लिए इस्तेमाल भाषा है। डिजाइनर अनुकूलित एक्सएमएल तत्व बना सकते हैं, जो अनुप्रयोगों और संगठनों के बीच डेटा की परिभाषा, संचरण, सत्यापन और व्याख्या को सक्षम करते हैं। यह बहुमुखी प्रतिभा डेटा विनिमय के लिए कई अवसर प्रदान करती है, लेकिन इसमें कम से कम एक अंतर्निहित चुनौती भी है। किसी XML दस्तावेज़ के तत्वों में हेरफेर करके, डिज़ाइनर दस्तावेज़ में किसी भी नेस्टेड तत्व आयाम बना सकते हैं। इन माता पिता/बच्चे तत्व रिश्तों एक एक्सेल वर्कशीट के दो आयामी पंक्ति और स्तंभ प्रतिमान में अस्पष्टता के लिए नेतृत्व कर सकते हैं।

इस अस्पष्टता से निपटने के लिए एक्सेल किसी भी XML डेटा यह प्राप्त करता है, जब तक कि डेटा एक शैली पत्रक है कि एक और प्रारूप predefines के साथ आता है के लिए एक प्रारूप बाध्य करती है। यह मजबूर प्रारूप करने के लिए एक सपाट कलन विधि का उपयोग द्वारा बनाई गई है पंक्तियों और स्तंभों एक वर्कशीट शामिल पॉप्युलेट। फिर भी यह प्रारूप बहुआयामी डेटा द्वि-आयामी प्रारूप में मजबूर करने में प्रभावी है, यह मानव पाठक के लिए सबसे अधिक इष्टतम प्रारूप में हमेशा डेटा प्रस्तुत करता है।

तो एक्सेल कैसे पता चलता है कि या तो फ़्लैटनिंग एल्गोरिदम या एक्सएसएलटी स्टाइल शीट का उपयोग कब करें? जब एक्सेल खोलता है या एक XML डेटा फ़ाइल आयात करता है, यह फ़ाइल को किसी XSLT शैली पत्रक के लिए अंक के अंदर एक तत्व के लिए लग रहा है। अगर ऐसा तत्व मौजूद है, एक्सेल एक संवाद बॉक्स आपको लागू करने के लिए शैली पत्रक या शैली पत्रक के बिना फ़ाइल खोलने का संकेत देता है कि प्रदर्शित करता है।

3

आप XSL पत्र में यह निर्देश जोड़ते हैं:

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

.... एक्सेल ठीक चलेंगे

+0

ऐसा लगता है कि यह काम नहीं करेगा। मेरे पास पहले से ही .xml पंक्ति है । और वह xslt कोड बस इस स्ट्रिंग को बनाते हैं। प्रॉम्प्ट "एक्सएमएल आयात करें" वैसे भी दिखाई देता है :( –