Попытка создать файл Excel 2007 XML с использованием C # и System.XML.Serialization.Корневой элемент XML-файла Excel таков:
<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")] открытый класс Styles {[XmlAttribute] открытый идентификатор строки {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: квалификатора для элементов, но он задыхается, потому что он не может иметь атрибут «ID» стиля.Он должен быть жестко запрограммирован для поиска буквенной строки 'ss: ID'?
Если я опускаю 's' в пространствах имен, он производит более чистый XML, но не устраняет мою ошибку.Я также попытался опустить пространство имен 'ss', а затем установить буквально 'ss' пространство имен объекта Style, но оно генерирует некоторое временное пространство имен с именем 'd4p1' и создает настоящий беспорядок.
Anyидеи о том, как заставить Excel читать корректный XML?
А что касается бонусных отметок, как я могу заставить начало моего XML-файла выглядеть следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Excel.Sheet"?>
Очевидно, что первая часть идет сXML-писатель, но есть ли нехакерские способы получить эту вторую строку?
Спасибо, ~ S