Con este código participé en el concurso de Open XML, bueno la verdad no se que resultados habrá tenido ni siquiera sé si mi proyecto llegó a ser considerado, pero para que las horas invertidas de frutos voy a compartir el trabajo que hice ... no estoy seguro que sea la mejor formar de trabajar pero he conseguido el objetivo de crear un archivo .docx ...
De lo que aprendí, puedo decir que el archivo .docx es una archivo comprimido que contiene por lo menos tres archivos para generar un documento con lo básico, es decir solo texto, en este ejemplo se crean los tres archivos .rels, [Content_Types].xml y el archivo .xml con el texto del documento.
A continuación el código
Console.WriteLine("");Console.WriteLine("Para generar el archivo DOCX con los tres anteriores, debemos recordar");
Console.WriteLine("");Console.WriteLine("1. Poner el archivo .rel dentro de la carpeta _rels");
Console.WriteLine("2. Seleccionar los dos archivos y la carpeta _rels para ponerlo en una carpeta comprimida Windows");
Console.WriteLine("3. Cambiar la extensión ZIP por DOCX");Console.WriteLine("");
Console.WriteLine("Generando: .rels");XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent =
true;settings.IndentChars = (" ");using (XmlWriter writer = XmlWriter.Create("_rels/.rels", settings))
{
// Write XML data.writer.WriteStartElement("Relationships", "http://schemas.openxmlformats.org/package/2006/relationships");
writer.WriteStartElement(
"Relationship");writer.WriteAttributeString("Id", "MyRelationship");
writer.WriteAttributeString(
"Type", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument");writer.WriteAttributeString("Target", "WjamaDoc.xml");
writer.WriteEndElement();
writer.WriteEndElement();
writer.Flush();
}
Console.WriteLine("");
Console.WriteLine("Generando: [Content_Types].xml");using (XmlWriter writer = XmlWriter.Create("[Content_Types].xml", settings))
{
// Write XML data.writer.WriteStartElement("Types", "http://schemas.openxmlformats.org/package/2006/content-types");
writer.WriteStartElement(
"Default");writer.WriteAttributeString("Extension", "XML");writer.WriteAttributeString("ContentType", "application/xml");
writer.WriteEndElement();
writer.WriteStartElement(
"Override");writer.WriteAttributeString("PartName", "/WjamaDoc.xml");writer.WriteAttributeString("ContentType", "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml");
writer.WriteEndElement();
writer.WriteStartElement(
"Default");writer.WriteAttributeString("Extension", "rels");writer.WriteAttributeString("ContentType", "application/vnd.openxmlformats-package.relationships+xml");
writer.WriteEndElement();
writer.WriteEndElement();
writer.Flush();
}
Console.WriteLine("");
Console.WriteLine("Generando: WjamaDoc.xml");using (XmlWriter writer = XmlWriter.Create("WjamaDoc.xml", settings))
{
// Write XML data.writer.WriteStartElement(Prefixes.WordprocessingML, "document", Namespaces.WordprocessingML);
writer.WriteStartElement(
Prefixes.WordprocessingML, "body", Namespaces.WordprocessingML);writer.WriteStartElement(Prefixes.WordprocessingML, "p",
Namespaces.WordprocessingML);writer.WriteStartElement(Prefixes.WordprocessingML, "r",
Namespaces.WordprocessingML);writer.WriteElementString(Prefixes.WordprocessingML, "t",Namespaces.WordprocessingML, "Hola Mundo");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteStartElement(Prefixes.WordprocessingML, "p",
Namespaces.WordprocessingML);writer.WriteStartElement(Prefixes.WordprocessingML, "r",
Namespaces.WordprocessingML);writer.WriteElementString(Prefixes.WordprocessingML, "t",Namespaces.WordprocessingML, elcorreo@msguayaquil);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteStartElement(Prefixes.WordprocessingML, "p",
Namespaces.WordprocessingML);writer.WriteStartElement(Prefixes.WordprocessingML, "r",
Namespaces.WordprocessingML);writer.WriteElementString(Prefixes.WordprocessingML, "t",Namespaces.WordprocessingML, "Dirección trabajo");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteStartElement(Prefixes.WordprocessingML, "p",
Namespaces.WordprocessingML);writer.WriteStartElement(Prefixes.WordprocessingML, "r",
Namespaces.WordprocessingML);writer.WriteElementString(Prefixes.WordprocessingML, "t",Namespaces.WordprocessingML, "Simplemente sorprendente de como se estructuran los archivos utilizando definiciones XML, el trabajo un poco complejo pero muy instructivo");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.Flush();
}