Как программно добавить XML-карту в электронную таблицу Excel 2010?

У меня есть базовый файл XML, который мне нужно добавить в качестве XML-карты на лист Excel 2010.

Как это сделать программно? Я бы предпочел решение, использующее Microsoft OpenXML SDK.


person ashwnacharya    schedule 29.09.2010    source источник
comment
Не могли бы вы уточнить, что вы подразумеваете под «сопоставлением» XML-файла с Excel?   -  person Edward Wilde    schedule 17.11.2011


Ответы (1)


Вам нужно будет добавить CustomXmlMappingsPart к вашему WorkbookPart и заполнить его схемой для вашего XML. Затем вам нужно будет добавить ConnectionsPart, связанный с вашим XML-файлом.

Приведенный ниже xml находится на моем рабочем столе в файле note.xml:

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

Это код для создания xmlmappings

CustomXmlMappingsPart part = workbookPart.AddNewPart<CustomXmlMappingsPart>("rId8");

CustomXmlMappingsPart part = new 
MapInfo mapInfo1 = new MapInfo(){ SelectionNamespaces = "" };

Schema schema1 = new Schema(){ Id = "Schema1" };

OpenXmlUnknownElement openXmlUnknownElement1 = OpenXmlUnknownElement.CreateOpenXmlUnknownElement("<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><xsd:element nillable=\"true\" name=\"note\"><xsd:complexType><xsd:sequence minOccurs=\"0\"><xsd:element minOccurs=\"0\" nillable=\"true\" type=\"xsd:string\" name=\"to\" form=\"unqualified\" /><xsd:element minOccurs=\"0\" nillable=\"true\" type=\"xsd:string\" name=\"from\" form=\"unqualified\" /><xsd:element minOccurs=\"0\" nillable=\"true\" type=\"xsd:string\" name=\"heading\" form=\"unqualified\" /><xsd:element minOccurs=\"0\" nillable=\"true\" type=\"xsd:string\" name=\"body\" form=\"unqualified\" /></xsd:sequence></xsd:complexType></xsd:element></xsd:schema>");

schema1.Append(openXmlUnknownElement1);

Map map1 = new Map(){ ID = (UInt32Value)1U, Name = "note_Map", RootElement = "note", SchemaId = "Schema1", ShowImportExportErrors = false, AutoFit = true, AppendData = false, PreserveAutoFilterState = true, PreserveFormat = true };
DataBinding dataBinding1 = new DataBinding(){ FileBinding = true, ConnectionId = (UInt32Value)1U, DataBindingLoadMode = (UInt32Value)1U };

map1.Append(dataBinding1);

mapInfo1.Append(schema1);
mapInfo1.Append(map1);

part.MapInfo = mapInfo1;

Этот код создает соединение и добавляет его в WorkbookPart:

ConnectionsPart part = wookbookPart.AddNewPart<ConnectionsPart>("rId5");

Connections connections1 = new Connections();

Connection connection1 = new Connection(){ Id = (UInt32Value)1U, Name = "note", Type = (UInt32Value)4U, RefreshedVersion = 0, Background = true };
WebQueryProperties webQueryProperties1 = new WebQueryProperties(){ XmlSource = true, SourceData = true, Url = "C:\\Users\\Thomas\\Desktop\\note.xml", HtmlTables = true, HtmlFormat = HtmlFormattingValues.All };

connection1.Append(webQueryProperties1);

connections1.Append(connection1);

part.Connections = connections1;

Я создал этот код с помощью Open XML SDK 2.0 Productivity Tool. Я сравнил обычный файл xlsx с файлом, в который добавил свою простую XML-карту. Надеюсь это поможет.

person Taterhead    schedule 10.03.2012