Abrir e adicionar texto a um documento de processamento de texto
Este tópico mostra como utilizar as classes no SDK Open XML para o Office para abrir e adicionar texto através de programação a um documento de processamento Word.
Como Abrir e Adicionar Texto a um Documento
O SDK Open XML ajuda-o a criar Word estrutura de documentos de processamento e conteúdo através de classes com tipos fortes que correspondem a WordprocessingML
elementos. Este tópico mostra como utilizar as classes no SDK Open XML para abrir um Word documento de processamento e adicionar texto ao mesmo. Além disso, este tópico apresenta a estrutura básica do documento de um WordprocessingML
documento, os elementos XML associados e as respetivas classes de SDK Open XML correspondentes.
Criar um Objeto WordprocessingDocument
No SDK Open XML, a WordprocessingDocument classe representa um pacote de documento Word. Para abrir e trabalhar com um Word documento, crie uma instância da classe a WordprocessingDocument partir do documento. Quando cria a instância a partir do documento, pode obter acesso à main parte do documento que contém o texto do documento. O texto na parte do documento main é representado no pacote como XML através WordprocessingML
de marcações.
Para criar a instância de classe a partir do documento a que chama um dos Open
métodos. Vários são fornecidos, cada um deles com uma assinatura diferente. O código de exemplo neste tópico utiliza o Open(String, Boolean) método com uma assinatura que requer dois parâmetros. O primeiro parâmetro utiliza uma cadeia de caminho completa que representa o documento a abrir. O segundo parâmetro é true
ou false
e representa se pretende que o ficheiro seja aberto para edição. As alterações efetuadas ao documento não serão guardadas se este parâmetro for false
.
O seguinte exemplo de código chama o Open
método .
// Open a WordprocessingDocument for editing using the filepath.
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true))
{
if (wordprocessingDocument is null)
{
throw new ArgumentNullException(nameof(wordprocessingDocument));
}
Quando tiver aberto o pacote de documento Word, pode adicionar texto à parte main documento. Para aceder ao corpo do main parte do documento, crie quaisquer elementos em falta e atribua uma referência ao corpo do documento, conforme mostrado no exemplo de código seguinte.
// Assign a reference to the existing document body.
MainDocumentPart mainDocumentPart = wordprocessingDocument.MainDocumentPart ?? wordprocessingDocument.AddMainDocumentPart();
mainDocumentPart.Document ??= new Document();
mainDocumentPart.Document.Body ??= mainDocumentPart.Document.AppendChild(new Body());
Body body = wordprocessingDocument.MainDocumentPart!.Document!.Body!;
Estrutura de um Documento wordProcessingML
A estrutura de documentos básica de um WordProcessingML
documento consiste nos document
elementos e body
, seguidos por um ou mais elementos de nível de bloco, como p
, que representa um parágrafo. Um parágrafo contém um ou mais r
elementos. Significa r
execução, que é uma região de texto com um conjunto comum de propriedades, como formatação. Uma execução contém um ou mais t
elementos. O t
elemento contém um intervalo de texto. O seguinte exemplo de código mostra a WordprocessingML
marcação de um documento que contém o texto "Texto de exemplo".
<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>
Com o SDK Open XML, pode criar estrutura e conteúdo de documentos com classes com tipos fortes que correspondem a WordprocessingML
elementos. Encontrará estas classes no espaço de nomes. A tabela seguinte lista os nomes das classes que correspondem aos document
elementos , body
, p
, r
e t
.
WordprocessingML Element | Abrir Classe SDK XML | Descrição |
---|---|---|
<document/> |
Document | O elemento raiz para a parte do documento principal. |
<body/> |
Body | O contentor para as estruturas de nível de bloco, como parágrafos, tabelas, anotações e outros especificados na especificação ISO/IEC 29500 . |
<p/> |
Paragraph | Um parágrafo. |
<r/> |
Run | Uma execução. |
<t/> |
Text | Um intervalo de texto. |
Para obter mais informações sobre a estrutura geral das partes e elementos de um documento do WordprocessingML, veja Structure of a WordprocessingML document (Estrutura de um documento wordprocessingML).
Gerar a Marcação WordprocessingML para Adicionar o Texto
Quando tiver acesso ao corpo da parte do documento main, adicione texto ao adicionar instâncias das Paragraphclasses , Rune Text . Isto gera a margem de lucro necessária do WordprocessingML. O seguinte exemplo de código adiciona o parágrafo.
// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));
Código de exemplo
O método de exemplo OpenAndAddTextToWordDocument
apresentado aqui pode ser utilizado para abrir um documento Word e acrescentar algum texto com o SDK Open XML. Para chamar este método, transmita um nome de ficheiro de caminho completo como o primeiro parâmetro e o texto a adicionar como o segundo.
string file = args[0];
string txt = args[1];
OpenAndAddTextToWordDocument(args[0], args[1]);
A seguir está o código de exemplo completo em C# e em Visual Basic.
Repare que o OpenAndAddTextToWordDocument
método não inclui uma chamada explícita para Save
. Isto acontece porque a funcionalidade Guardar Automaticamente está ativada por predefinição e não foi desativada na chamada para o Open
método através da utilização de OpenSettings
.
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
static void OpenAndAddTextToWordDocument(string filepath, string txt)
{
// Open a WordprocessingDocument for editing using the filepath.
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true))
{
if (wordprocessingDocument is null)
{
throw new ArgumentNullException(nameof(wordprocessingDocument));
}
// Assign a reference to the existing document body.
MainDocumentPart mainDocumentPart = wordprocessingDocument.MainDocumentPart ?? wordprocessingDocument.AddMainDocumentPart();
mainDocumentPart.Document ??= new Document();
mainDocumentPart.Document.Body ??= mainDocumentPart.Document.AppendChild(new Body());
Body body = wordprocessingDocument.MainDocumentPart!.Document!.Body!;
// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));
}
}