7

OOXML SDK を使用して XLSX スプレッドシートを生成していますが、x:名前空間プレフィックスを削除する必要があります。どうすればこれを達成できますか?

using (SpreadsheetDocument doc = SpreadsheetDocument.Open("template.xlsx", true))
            {
                //共有文字列テーブル部分を保存
                if (doc.WorkbookPart.GetPartsOfType().Count() > 0)
                {
                    SharedStringTablePart shareStringPart = 
doc.WorkbookPart.GetPartsOfType().First(); shareStringPart.SharedStringTable.Save(); } //ワークブックを保存 doc.WorkbookPart.Workbook.Save(); }

ここでは、元の XLSX ファイルは Excel 2007 からのものであり、プレフィックスはありませんが、保存操作後にプレフィックスが表示されます。どうすればそれを回避できますか?

4

2 に答える 2

3

これは、divo によってリンクされたスタイルシートの修正版で、名前空間を 1 つだけ取り除き、残りを逐語的にコピーしています。

<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>
于 2009-08-23T18:12:45.370 に答える
0

私が大幅に間違っていない限り、元のファイルにも名前空間が付けられています - デフォルトの名前空間の形式でのみです。そもそも名前空間の何が問題なのですか?

于 2009-07-29T09:36:00.940 に答える