Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se muestra cómo usar las clases del SDK de Open XML para Office para abrir mediante programación un documento de procesamiento de Word desde una secuencia.
Cuándo se debe abrir un documento de una secuencia
Si tiene una aplicación, como una aplicación de SharePoint, que funciona con documentos que usan entrada y salida de flujo y desea emplear el SDK de Open XML para trabajar con uno de los documentos, esto está diseñado para ser fácil de hacer. Esto es especialmente cierto si el documento existe y puede abrirlo mediante el SDK de Open XML. Sin embargo, imagine que el documento contiene un flujo abierto en el lugar del código donde necesita trabajar con el SDK. Ese es el escenario de este tema. El método de ejemplo del código de ejemplo acepta una secuencia abierta como parámetro y, a continuación, agrega texto al documento detrás de la secuencia mediante el SDK de Open XML.
Creación de un objeto WordprocessingDocument
En el SDK de Open XML, la WordprocessingDocument clase representa un paquete de documento Word. Para trabajar con un documento de Word, cree primero una instancia de la WordprocessingDocument clase a partir del documento y, a continuación, trabaje con esa instancia. Cuando se crea la instancia desde el documento, se puede obtener acceso a la parte de documento principal que contiene el texto del documento. Cada paquete de Office Open XML contiene una cierta cantidad de partes. Como mínimo, debe WordprocessingDocument contener una parte del documento principal que actúe como contenedor para el texto principal del documento. El paquete también puede tener partes adicionales. Observe que en un documento Word, el texto del elemento de documento principal se representa en el paquete como XML mediante WordprocessingML
marcado.
Para crear la instancia de clase a partir del documento, llame al Open(Stream, Boolean) método . Se proporcionan varios Open
métodos, cada uno con una firma diferente. El código de ejemplo de este tema usa el Open
método con una firma que requiere dos parámetros. El primer parámetro toma un identificador de la secuencia desde la que desea abrir el documento. El segundo parámetro es true
o false
y representa si la secuencia se abre para su edición.
En el ejemplo de código siguiente se llama al Open
método .
// Open a WordProcessingDocument based on a stream.
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(stream, true))
{
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 DocumentFormat.OpenXml.Wordprocessing 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.
Funcionamiento del código de ejemplo
Cuando abre el paquete de documentos de Word, puede agregar texto a la parte de documento principal. Para acceder al cuerpo de la parte principal del documento, asigne una referencia al cuerpo del documento, como se muestra en el siguiente segmento de código.
// Assign a reference to the document body.
MainDocumentPart mainDocumentPart = wordprocessingDocument.MainDocumentPart ?? wordprocessingDocument.AddMainDocumentPart();
mainDocumentPart.Document ??= new Document();
Body body = mainDocumentPart.Document.Body ?? mainDocumentPart.Document.AppendChild(new Body());
Al acceder al cuerpo del elemento de documento principal, agregue texto agregando instancias de las Paragraphclases , Runy Text . Esto genera el marcado necesario WordprocessingML
. Con las siguientes líneas del ejemplo de código se agregan el párrafo, el segmento y el texto.
// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));
Código de ejemplo
El método de ejemplo OpenAndAddToWordprocessingStream
que se muestra aquí se puede usar para abrir un documento Word desde una secuencia ya abierta y anexar texto mediante el SDK de Open XML. Para llamarlo, puede pasar un identificador a una secuencia abierta como el primer parámetro y el texto que se va a agregar como el segundo, para llamar al método. Por ejemplo, en el siguiente ejemplo de código se abre el archivo especificado en el primer argumento y se le agrega texto del segundo argumento.
string filePath = args[0];
string txt = args[1];
using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
{
OpenAndAddToWordprocessingStream(fileStream, txt);
}
Nota:
Observe que el OpenAddAddToWordprocessingStream
método no cierra la secuencia que se le ha pasado. El código de llamada debe hacerlo ajustando la llamada al método en una using
instrucción o llamando explícitamente a Dispose.
A continuación se incluye el código de ejemplo completo en C# y Visual Basic.
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System.IO;
static void OpenAndAddToWordprocessingStream(Stream stream, string txt)
{
// Open a WordProcessingDocument based on a stream.
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(stream, true))
{
// Assign a reference to the document body.
MainDocumentPart mainDocumentPart = wordprocessingDocument.MainDocumentPart ?? wordprocessingDocument.AddMainDocumentPart();
mainDocumentPart.Document ??= new Document();
Body body = mainDocumentPart.Document.Body ?? mainDocumentPart.Document.AppendChild(new Body());
// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));
}
// Caller must close the stream.
}