簡體   English   中英

Excel 2007:XML:對缺少的ss:名稱空間限定符感到cho

[英]Excel 2007: XML: choking on missing ss: namespace qualifier

嘗試使用C#和System.XML.Serialization創建Excel 2007 XML文件。 Excel XML文件的根元素如下所示:

<Workbook xmlns:html="http://www.w3.org/TR/REC-html40" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="urn:schemas-microsoft-com:office:spreadsheet">

默認名稱空間中的許多元素都具有用“ ss”限定的屬性,這是不必要的,因為“ ss”和默認名稱空間都為“ urn:schemas-microsoft-com:office:spreadsheet”。

例如,Style元素顯示為:

   <Style ss:ID="s21">
      <Font x:Family="Swiss" ss:Bold="1"/>
   </Style>

創建XmlSerializerNamespaces時,我添加了Excel要的所有命名空間:

var ns = new XmlSerializerNamespaces();
ns.Add("", "urn:schemas-microsoft-com:office:spreadsheet");
ns.Add("o", "urn:schemas-microsoft-com:office:office");
ns.Add("x", "urn:schemas-microsoft-com:office:excel");
ns.Add("ss", "urn:schemas-microsoft-com:office:spreadsheet");
ns.Add("html", "http://www.w3.org/TR/REC-html40");

在生成的XML中,省略了“”(默認)名稱空間,因為它與“ ss”相同。

我的樣式對象類似於:[XmlRoot(Namespace =“ urn:schemas-microsoft-com:office:spreadsheet”)]公共類樣式{[XmlAttribute]公共字符串ID {get; 組; }

    [XmlAttribute]
    public string Name { get; set; }

    [XmlElement]
    public string Font { get; set; }
}

當我實際生成XML時,我得到:

<ss:Style ID="s21">
          <ss:Font x:Family="Swiss" Bold="1"/>
</ss:Style>

我認為這在技術上沒有任何問題。 Excel不在乎元素上的ss:限定符,但它會阻塞,因為它不能使用Style的'ID'屬性。 必須使用硬編碼查找文字字符串“ ss:ID”嗎?

如果我從名稱空間中省略“ s”,它將生成更清晰的XML,但不會使我的錯誤消失。 我也嘗試過省略'ss'命名空間,然后將Style對象的命名空間設置為字面上的'ss',但是它會生成一些名為'd4p1'的臨時命名空間,並造成了真正的混亂。

關於如何使Excel讀取有效XML的任何想法?

對於加分標記,我該如何使XML文件的開頭看起來像這樣:

<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Excel.Sheet"?>

顯然,第一部分是XML編寫器附帶的,但是是否有任何非駭客的方法來獲得第二行?

謝謝〜S

您是否考慮使用針對Microsoft OfficeOpen XML SDK 2.0,而不是自己編寫xml? 除了幫助處理Open XML文檔之外,它還包含許多文檔,並且看起來非常適合您的任務:

適用於Microsoft Office的Open XML SDK 2.0建立在System.IO.Packaging API的基礎上,並提供了用於操作Open XML文檔的強類型零件類。 該SDK還使用.NET Framework語言集成查詢(LINQ)技術來提供對Open XML文檔內部的XML內容的強類型對象訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM