2009-07-29 11 views
7

Sto generando il foglio di calcolo XLSX utilizzando OOXML SDK e ho bisogno di eliminare il prefisso dello spazio dei nomi x:. Come posso raggiungere questo obiettivo?XLSX- come sbarazzarsi del prefisso dello spazio dei nomi predefinito 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(); }

Qui, il file XLSX originale proviene da Excel 2007 e non ha il prefisso, tuttavia, dopo l'operazione di salvataggio appare il prefisso. Come posso evitarlo?

+1

Perché avete bisogno di sbarazzarsi del prefisso? Quale problema è causato dal prefisso? –

+0

Perché il client ha qualche software strano che non riesce a importare il file con il prefisso - e non c'è niente a che fare con quello. Ho appena rimosso i prefissi manualmente, ed è stato importato ok. – user116884

+0

Come applicare un passaggio post-elaborazione al documento XSLX che rimuove il prefisso e imposta lo spazio dei nomi predefinito appropriato? Vedi anche http://stackoverflow.com/questions/413050/c-how-to-remove-namespace-information-from-xml-elements/413088#413088 –

risposta

0

A meno che non mi sbagli molto, il file originale è anche in forma di namespace - solo nella forma di uno spazio dei nomi predefinito. Cosa c'è di sbagliato nello spazio dei nomi, in primo luogo?

+0

Hai ragione. Questo è quello che voglio: lo spazio dei nomi predefinito. Questo perché il mio client ha qualche software strano che non riesce a importare XLSX con il prefisso - e non c'è niente a che fare con quello. Se rimuovo i prefissi manualmente, importa ok. – user116884

3

Ecco una versione modificata del foglio di stile collegati da divo che mette a nudo solo un singolo spazio dei nomi e copia il resto testualmente:

<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> 
Problemi correlati