Como automatizar o Microsoft Word para criar um novo documento utilizando o Visual C#

Traduções de Artigos Traduções de Artigos
Artigo: 316384 - Ver produtos para os quais este artigo se aplica.
Para obter uma Microsoft Visual Basic .NET versão deste artigo, consulte 316383.
Para obter uma versão de Microsoft Visual Basic 6.0 deste artigo, consulte 313193.
Expandir tudo | Reduzir tudo

Sumário

Este artigo passo a passo descreve como criar um novo documento no Microsoft Word utilizando a automatização do Microsoft Visual C# 2005 ou Microsoft Visual C# .NET.

Código de exemplo

O código de exemplo neste artigo demonstra como efectuar o seguinte:
  • Inserir parágrafos com texto e formatação.
  • Procurar e modificar vários intervalos num documento.
  • Inserir tabelas, formatar tabelas e Povoe as tabelas com dados.
  • Adicione um gráfico.
Para criar um novo documento do Word utilizando a automatização do Visual C# 2005 ou o Visual C#. NET, siga estes passos:
  1. Inicie o Microsoft Visual Studio 2005 ou Microsoft Visual Studio NET..
  2. No menu ficheiro , clique em Novo e, em seguida, clique em projecto . Em Project Types , clique em Visual C# Projects e, em seguida, clique em Windows Application em Templates . É criado o Form1 por predefinição.

    Nota No Visual Studio 2005, clique em Visual C# em vez do Visual C# Projects .
  3. Adicione uma referência à Biblioteca de objectos do Microsoft Word . Para o fazer, siga estes passos:
    1. No menu projecto , clique em Add Reference .
    2. No separador COM , localize O Microsoft Word Object Library e, em seguida, clique em Seleccionar .

      Nota No Visual Studio 2005, não é necessário clique em Seleccionar .
      Nota O Microsoft Office 2003 inclui Primary Interop Assemblies (PIAs). Microsoft Office XP não inclui PIAs, mas pode ser transferidos. Para obter mais informações sobre PIAs do Office XP, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
      328912INFO: PIAs do Microsoft Office XP estão disponíveis para transferência
    3. Clique em OK na caixa de diálogo Adicionar referências para aceitar as selecções. Se for pedido para gerar wrappers para as bibliotecas que seleccionou, clique em Sim .
  4. No menu Ver , seleccione a caixa de ferramentas para visualizar a caixa de ferramentas e, em seguida, adicione um botão ao Form1.
  5. Faça duplo clique em Button1 . Aparece a janela código para o formulário.
  6. Na janela de código, substitua o seguinte código
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    					
    com:
    private void button1_Click(object sender, System.EventArgs e)
    {
    	object oMissing = System.Reflection.Missing.Value;
    	object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */ 
    
    	//Start Word and create a new document.
    	Word._Application oWord;
    	Word._Document oDoc;
    	oWord = new Word.Application();
    	oWord.Visible = true;
    	oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
    		ref oMissing, ref oMissing);
    
    	//Insert a paragraph at the beginning of the document.
    	Word.Paragraph oPara1;
    	oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing);
    	oPara1.Range.Text = "Heading 1";
    	oPara1.Range.Font.Bold = 1;
    	oPara1.Format.SpaceAfter = 24;    //24 pt spacing after paragraph.
    	oPara1.Range.InsertParagraphAfter();
    
    	//Insert a paragraph at the end of the document.
    	Word.Paragraph oPara2;
    	object oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    	oPara2 = oDoc.Content.Paragraphs.Add(ref oRng);
    	oPara2.Range.Text = "Heading 2";
    	oPara2.Format.SpaceAfter = 6;
    	oPara2.Range.InsertParagraphAfter();
    
    	//Insert another paragraph.
    	Word.Paragraph oPara3;
    	oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    	oPara3 = oDoc.Content.Paragraphs.Add(ref oRng);
    	oPara3.Range.Text = "This is a sentence of normal text. Now here is a table:";
    	oPara3.Range.Font.Bold = 0;
    	oPara3.Format.SpaceAfter = 24;
    	oPara3.Range.InsertParagraphAfter();
    
    	//Insert a 3 x 5 table, fill it with data, and make the first row
    	//bold and italic.
    	Word.Table oTable;
    	Word.Range wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    	oTable = oDoc.Tables.Add(wrdRng, 3, 5, ref oMissing, ref oMissing);
    	oTable.Range.ParagraphFormat.SpaceAfter = 6;
    	int r, c;
    	string strText;
    	for(r = 1; r <= 3; r++)
    		for(c = 1; c <= 5; c++)
    		{
    			strText = "r" + r + "c" + c;
    			oTable.Cell(r, c).Range.Text = strText;
    		}
    	oTable.Rows[1].Range.Font.Bold = 1;
    	oTable.Rows[1].Range.Font.Italic = 1;
    
    	//Add some text after the table.
    	Word.Paragraph oPara4;
    	oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    	oPara4 = oDoc.Content.Paragraphs.Add(ref oRng);
    	oPara4.Range.InsertParagraphBefore();
    	oPara4.Range.Text = "And here's another table:";
    	oPara4.Format.SpaceAfter = 24;
    	oPara4.Range.InsertParagraphAfter();
    
    	//Insert a 5 x 2 table, fill it with data, and change the column widths.
    	wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    	oTable = oDoc.Tables.Add(wrdRng, 5, 2, ref oMissing, ref oMissing);
    	oTable.Range.ParagraphFormat.SpaceAfter = 6;
    	for(r = 1; r <= 5; r++)
    		for(c = 1; c <= 2; c++)
    		{
    			strText = "r" + r + "c" + c;
    			oTable.Cell(r, c).Range.Text = strText;
    		}
    	oTable.Columns[1].Width = oWord.InchesToPoints(2); //Change width of columns 1 & 2
    	oTable.Columns[2].Width = oWord.InchesToPoints(3);
    
    	//Keep inserting text. When you get to 7 inches from top of the
    	//document, insert a hard page break.
    	object oPos;
    	double dPos = oWord.InchesToPoints(7);
    	oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range.InsertParagraphAfter();
    	do
    	{
    		wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    		wrdRng.ParagraphFormat.SpaceAfter = 6;
    		wrdRng.InsertAfter("A line of text");
    		wrdRng.InsertParagraphAfter();
    		oPos = wrdRng.get_Information
                           (Word.WdInformation.wdVerticalPositionRelativeToPage);
    	}
    	while(dPos >= Convert.ToDouble(oPos));
    	object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
    	object oPageBreak = Word.WdBreakType.wdPageBreak;
    	wrdRng.Collapse(ref oCollapseEnd);
    	wrdRng.InsertBreak(ref oPageBreak);
    	wrdRng.Collapse(ref oCollapseEnd);
    	wrdRng.InsertAfter("We're now on page 2. Here's my chart:");
    	wrdRng.InsertParagraphAfter();
    
    	//Insert a chart.
    	Word.InlineShape oShape;
    	object oClassType = "MSGraph.Chart.8";
    	wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    	oShape = wrdRng.InlineShapes.AddOLEObject(ref oClassType, ref oMissing, 
    		ref oMissing, ref oMissing, ref oMissing,
    		ref oMissing, ref oMissing, ref oMissing);
    
    	//Demonstrate use of late bound oChart and oChartApp objects to
    	//manipulate the chart object with MSGraph.
    	object oChart;
    	object oChartApp;
    	oChart = oShape.OLEFormat.Object;
    	oChartApp = oChart.GetType().InvokeMember("Application",
    		BindingFlags.GetProperty, null, oChart, null);
    
    	//Change the chart type to Line.
    	object[] Parameters = new Object[1];
    	Parameters[0] = 4; //xlLine = 4
    	oChart.GetType().InvokeMember("ChartType", BindingFlags.SetProperty,
    		null, oChart, Parameters);
    
    	//Update the chart image and quit MSGraph.
    	oChartApp.GetType().InvokeMember("Update",
    		BindingFlags.InvokeMethod, null, oChartApp, null);
    	oChartApp.GetType().InvokeMember("Quit",
    		BindingFlags.InvokeMethod, null, oChartApp, null);
    	//... If desired, you can proceed from here using the Microsoft Graph 
    	//Object model on the oChart and oChartApp objects to make additional
    	//changes to the chart.
    
    	//Set the width of the chart.
    	oShape.Width = oWord.InchesToPoints(6.25f);
    	oShape.Height = oWord.InchesToPoints(3.57f);
    
    	//Add text after the chart.
    	wrdRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
    	wrdRng.InsertParagraphAfter();
    	wrdRng.InsertAfter("THE END.");
    
    	//Close this form.
    	this.Close();
    }
    					
  7. Desloque-se para o início da janela de código. Adicionar a seguinte linha no fim da lista de directivas utilizando :
    using Word = Microsoft.Office.Interop.Word;
    using System.Reflection;
    					
  8. Prima F5 para criar e executar o programa.
  9. Clique em Button1 para iniciar a automatização do Word e criar o documento.
Depois de concluído o código, examine o documento que foi criado. O documento contém duas páginas de parágrafos formatados, tabelas e um gráfico.

Utilizar um modelo

Se estiver usando automatização para criar documentos que estão num formato comum, pode beneficiar de iniciar o processo com um novo documento baseado num modelo pré-formatado. Utilizando um modelo com o cliente de automatização do Word tem duas vantagens significativas através da criação de um documento a partir do nada:
  • Pode ter maior controlo sobre a formatação e posição de objectos ao longo de documentos.
  • Pode criar os seus documentos com menos código.
Utilizando um modelo, pode ajustar o posicionamento de tabelas, parágrafos e outros objectos no documento, bem como incluir formatação esses objectos. Ao utilizar a automatização, pode criar um documento novo baseado no modelo com o código, tal como o seguinte:
object oTemplate = "c:\\MyTemplate.dot";
oDoc = oWord.Documents.Add(ref oTemplate, ref oMissing,
	ref oMissing, ref oMissing);
				
no modelo, pode definir marcadores para que a automatização de cliente pode introduza o texto variável numa localização específica no documento, como se segue:
object oBookMark = "MyBookmark";
oDoc.Bookmarks.Item(ref oBookMark).Range.Text = "Some Text Here";
				
outra vantagem utilizando um modelo consiste que pode criar e armazenar estilos de formatação que deseja aplicar no tempo de execução, da seguinte forma:
object oStyleName = "MyStyle";
oDoc.Bookmarks.Item(ref oBookMark).Range.set_Style(ref oStyleName);
				
- ou -
object oStyleName = "MyStyle";
oWord.Selection.set_Style(ref oStyleName);
				

Referências

Para obter mais informações, clique números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
301659COMO: Automatizar o Microsoft Word para efectuar a impressão em série a partir do Visual C# .NET
302902COMO: Ligação para servidores de automatização do Office com o Visual C# .NET
Para obter mais informações, visite os seguintes Web sites da Microsoft Developer Network (MSDN):
Desenvolvimento do Microsoft Office com o Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx

Word no Office (da MSDN artigo online)
http://msdn2.microsoft.com/en-us/library/aa201330(office.11).aspx

Word mais um (artigo online MSDN)
http://msdn2.microsoft.com/en-us/library/aa201332(office.11).aspx

Propriedades

Artigo: 316384 - Última revisão: 17 de maio de 2007 - Revisão: 7.7
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# 2005 Express Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
Palavras-chave: 
kbmt kbautomation kbhowtomaster KB316384 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 316384

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com