Crear un paquete
En este tema se muestra cómo usar las clases del SDK de Open XML para Office para crear mediante programación un paquete de documentos de procesamiento de texto a partir de contenido en forma de WordprocessingML
marcado XML.
Partes de documento y paquetes
Un documento Open XML se almacena como un paquete, cuyo formato está definido por ISO/IEC 29500. El paquete puede incluir varias partes con relaciones entre ellas. La relación entre las partes controla la categoría del documento. Un documento puede definirse como un documento de procesamiento de texto si su elemento de relación de paquete contiene una relación con una parte de documento principal. Si su elemento de relación de paquete contiene una relación con una parte de presentación, puede definirse como un documento de presentación. Si su elemento de relación de paquete contiene una relación con una parte de libro, se define como un documento de hoja de cálculo. En este tema sobre procedimientos se usará un paquete de documentos de procesamiento de texto.
Obtención de un objeto WordprocessingDocument
En el SDK de Open XML, la WordprocessingDocument clase representa un paquete de documento Word. Para crear un documento Word, cree una instancia de la WordprocessingDocument clase y rellénela con partes. Como mínimo, el documento debe tener una parte de documento principal que sirva como contenedor del texto principal del documento. El texto se representa en el paquete como XML mediante WordprocessingML
marcado.
Para crear la instancia de clase, llame a Create(String, WordprocessingDocumentType). Se proporcionan varios Create métodos, cada uno con una firma diferente. El primer parámetro toma una cadena de ruta de acceso completa que representa el documento que desea crear. El segundo parámetro es miembro de la WordprocessingDocumentType enumeración . Este parámetro representa el tipo de documento. Por ejemplo, hay un miembro diferente de la WordprocessingDocumentType enumeración para cada documento, plantilla y la macro habilitada variedad de documento y plantilla.
Nota:
Seleccione cuidadosamente el archivo adecuado WordprocessingDocumentType y compruebe que el archivo persistente tiene la extensión de archivo correcta y coincidente. WordprocessingDocumentType Si no coincide con la extensión de archivo, se produce un error al abrir el archivo en Microsoft Word.
using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
Con v3.0.0+ el Close() método se ha quitado en favor de confiar en la instrucción using.
Garantiza que se llama automáticamente al Dispose() método cuando se alcanza la llave de cierre. El bloque que sigue a la instrucción using establece un ámbito para el objeto que se crea o se nombra en la instrucción using. Dado que la WordprocessingDocument clase del SDK de Open XML guarda y cierra automáticamente el objeto como parte de su IDisposable implementación y, dado Dispose() que se llama automáticamente al salir del bloque, no es necesario llamar Save() explícitamente o siempre que Dispose() use una using
instrucción.
Una vez que haya creado el paquete de documentos de Word, puede agregarle partes. Para agregar la parte principal del documento, llame a AddMainDocumentPart. Una vez hecho esto, puede comenzar a agregar el texto y la estructura del documento.
Estructura de un documento WordProcessingML
La estructura básica de un WordProcessingML
documento consta de los document
elementos y body
, seguidos de uno o varios elementos de nivel de bloque, como p
, que representa un párrafo. Un párrafo contiene uno o varios r
elementos. significa r
ejecutar, que es una región de texto con un conjunto común de propiedades, como el formato. Una ejecución contiene uno o varios t
elementos. El t
elemento contiene un intervalo de texto. En el ejemplo de código siguiente se muestra el WordprocessingML
marcado de un documento que contiene el texto "Texto de ejemplo".
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>Example text.</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
Con el SDK de Open XML, puede crear contenido y estructura de documentos mediante clases fuertemente tipadas que corresponden a WordprocessingML
elementos. Encontrará estas clases en el espacio de nombres. En la tabla siguiente se enumeran los nombres de clase de las clases correspondientes a los document
elementos , body
, p
, r
y t
.
Elemento de WordprocessingML | Open XML SDK (clase) | Descripción |
---|---|---|
<document/> |
Document | El elemento raíz del elemento de documento principal. |
<body/> |
Body | El contenedor de las estructuras a nivel de bloque, como párrafos, tablas, anotaciones y otras recogidas en la especificación ISO/IEC 29500. |
<p/> |
Paragraph | Un párrafo. |
<r/> |
Run | Un segmento. |
<t/> |
Text | Un intervalo de texto. |
Para obtener más información sobre la estructura general de los elementos y elementos de un documento WordprocessingML, vea Estructura de un documento WordprocessingML.
Código de ejemplo
A continuación se muestra el ejemplo de código completo que puede usar para crear un paquete de documentos de procesamiento de texto Open XML a partir de contenido XML en forma de WordprocessingML
marcado.
Después de ejecutar el programa, abra el archivo creado y examine su contenido; debe ser un párrafo que contenga la frase "Hello mundo!"
A continuación se incluye el código de ejemplo completo en C# y Visual Basic.
// To create a new package as a Word document.
static void CreateNewWordDocument(string document)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))
{
// Set the content of the document so that Word can open it.
MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();
SetMainDocumentContent(mainPart);
}
}
// Set the content of MainDocumentPart.
static void SetMainDocumentContent(MainDocumentPart part)
{
const string docXml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<w:document xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main"">
<w:body>
<w:p>
<w:r>
<w:t>Hello World</w:t>
</w:r>
</w:p>
</w:body>
</w:document>";
using (Stream stream = part.GetStream())
{
byte[] buf = (new UTF8Encoding()).GetBytes(docXml);
stream.Write(buf, 0, buf.Length);
}
}