2009-07-29 33 views
7

Tôi đang tạo bảng tính XLSX bằng OOXML SDK và tôi cần loại bỏ tiền tố không gian tên x:. Làm thế nào tôi có thể đạt được điều này?XLSX- cách loại bỏ tiền tố không gian tên mặc định x :?

 
using (SpreadsheetDocument doc = SpreadsheetDocument.Open("template.xlsx", true)) 
      { 
       //Save the shared string table part 
       if (doc.WorkbookPart.GetPartsOfType().Count() > 0) 
       { 
        SharedStringTablePart shareStringPart = 
doc.WorkbookPart.GetPartsOfType().First(); shareStringPart.SharedStringTable.Save(); } //Save the workbook doc.WorkbookPart.Workbook.Save(); }

Ở đây, tệp XLSX ban đầu đến từ Excel 2007 và không có tiền tố, tuy nhiên, sau khi thao tác lưu tiền tố xuất hiện. Làm thế nào tôi có thể tránh điều đó?

+1

Tại sao bạn cần để thoát khỏi tiền tố? Vấn đề gì là do tiền tố gây ra? –

+0

Bởi vì khách hàng có một số phần mềm lạ mà không nhập tập tin với tiền tố - và không có gì để làm với điều đó. Tôi chỉ cần loại bỏ các tiền tố bằng tay, và nó đã được nhập ok. – user116884

+0

Cách áp dụng bước hậu xử lý cho tài liệu XSLX của bạn để xóa tiền tố và đặt không gian tên mặc định thích hợp? Xem thêm http://stackoverflow.com/questions/413050/c-how-to-remove-namespace-information-from-xml-elements/413088#413088 –

Trả lời

0

Trừ khi tôi bị nhầm lẫn nhiều, tệp gốc cũng không được đặt tên - chỉ ở dạng không gian tên mặc định. Có gì sai với không gian tên ở nơi đầu tiên?

+0

Bạn nói đúng. Đó là những gì tôi muốn - không gian tên mặc định. Đó là bởi vì khách hàng của tôi có một số phần mềm lạ mà không nhập được XLSX với tiền tố - và không có gì để làm với điều đó. Nếu tôi loại bỏ các tiền tố bằng tay, nó sẽ nhập ok. – user116884

3

Đây là một phiên bản sửa đổi của các kiểu liên kết bởi Divo mà chỉ tách một namespace đơn lẻ và các bản sao phần còn lại đúng nguyên văn:

<xsl:stylesheet version="1.0" xmlns:x="namespace-to-strip" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="no" encoding="UTF-8"/> 

    <xsl:template match="/|comment()|processing-instruction()"> 
    <xsl:copy> 
     <xsl:apply-templates/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="x:*"> 
    <xsl:element name="{local-name()}"> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:element> 
    </xsl:template> 

    <xsl:template match="@x:*"> 
    <xsl:attribute name="{local-name()}"> 
     <xsl:value-of select="."/> 
    </xsl:attribute> 
    </xsl:template> 

    <xsl:template match="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
Các vấn đề liên quan