2009-05-29 6 views
5

Tôi có một mẫu XSLT được áp dụng cho một tệp dữ liệu XML. Mẫu tạo ra tệp XML Bảng tính Excel.Áp dụng XSLT trên XML trước khi nhập vào Excel

Mọi thứ hoạt động tuyệt vời ngoại trừ một vấn đề nhỏ ....

Khi tôi mở bảng tính trong Excel, nó đối xử với nó như một khẩu XML và hỏi tôi liệu stylesheet nên được áp dụng. Tôi muốn có nó để nó tự động áp dụng bất kỳ mẫu XSLT nào được liên kết với tệp.

Dưới đây là một số mẫu mã .... cảm ơn trước ....

XML Document ...

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

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

XSLT Template ...

<?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

Đây không thực sự là một câu hỏi XSLT, nhưng là một câu hỏi Excel ... – 0x6adb015

Trả lời

3

Từ hiểu biết của tôi, không có cách nào xung quanh Nhập XML ... dialo g được hiển thị. Lý do được giải thích trong bài viết MSDN này (Transform XML Files with XSLT When Importing into Microsoft Excel 2002):

XML là ngôn ngữ đánh dấu được sử dụng để mô tả dữ liệu có cấu trúc (như trong bảng tính) để có thể đọc được nhiều ứng dụng khác nhau. Các nhà thiết kế có thể tạo các phần tử XML tùy chỉnh, cho phép định nghĩa, truyền tải, xác thực và giải thích dữ liệu giữa các ứng dụng và giữa các tổ chức. Tính linh hoạt này cung cấp nhiều cơ hội cho trao đổi dữ liệu, nhưng nó cũng có ít nhất một thách thức cố hữu. Bằng cách thao tác các phần tử của một tài liệu XML, các nhà thiết kế có thể tạo bất kỳ số lượng các tham số phần tử lồng nhau nào trong một tài liệu. Các mối quan hệ phần tử cha/con này có thể dẫn đến sự mơ hồ trong mô hình hàng-và-cột hai chiều của một trang tính Excel.

Để đối phó với sự nhập nhằng này, Excel buộc một định dạng để bất kỳ dữ liệu XML nó nhận, trừ trường hợp các dữ liệu đi kèm với một tấm phong cách mà predefines định dạng khác . Định dạng bắt buộc này được tạo bằng cách sử dụng thuật toán làm phẳng để điền vào các hàng và cột mà bao gồm một trang tính. Tuy nhiên, trong khi định dạng này hiệu quả trong việc buộc dữ liệu đa chiều thành định dạng hai chiều hai chiều, nó không luôn hiển thị dữ liệu ở hầu hết các định dạng tối ưu dành cho người đọc.

Vậy làm thế nào để Excel biết khi nào nên sử dụng hoặc thuật toán làm phẳng hoặc biểu định kiểu XSLT? Khi Excel mở hoặc nhập tệp dữ liệu XML, nó sẽ tìm kiếm một phần tử bên trong tệp trỏ tới vào biểu định kiểu XSLT. Nếu có phần tử , Excel sẽ hiển thị hộp thoại nhắc bạn áp dụng biểu định kiểu hoặc để mở tệp mà không có biểu định kiểu.

3

nếu bạn thêm hướng dẫn này trong bảng xsl:

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

.... excel sẽ chạy tốt

+0

Dường như điều này sẽ không hoạt động. Tôi đã có hàng .xml với . Và mã xslt đó chỉ tạo chuỗi này. Nhắc "Nhập XML" xuất hiện anyway :( –