Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Resumo
Este artigo demonstra como automatizar o Microsoft Excel usando o Microsoft Visual C# 2005 ou o Microsoft Visual C# .NET para preencher e recuperar valores em um intervalo de várias células usando matrizes.
Informações adicionais
Para preencher um intervalo de várias células sem preencher as células uma de cada vez, você pode definir a propriedade Value de um objeto Range como uma matriz bidimensional. Da mesma forma, você pode recuperar uma matriz bidimensional de valores para várias células de uma só vez usando a propriedade Value. As etapas a seguir demonstram esse processo para definir e recuperar dados usando matrizes bidimensionais.
Criar o Cliente de Automação para o Microsoft Excel
Inicie o Microsoft Visual Studio 2005 ou o Microsoft Visual Studio .NET.
No menu Arquivo, clique em Novo e, em seguida, clique em Projeto. Selecione Aplicativo do Windows nos tipos de projeto do Visual C#. O Form1 é criado por padrão.
Adicione uma referência à Biblioteca de Objetos do Microsoft Excel 11.0 no Visual Studio 2005 ou na Biblioteca de Objetos do Microsoft Excel no Visual Studio .NET. Para fazer isso, siga estas etapas:
- On the Project menu, click Add Reference.
- Na guia COM, localize a Biblioteca de Objetos do Microsoft Excel e clique em Selecionar.
No Visual Studio 2005, localize a Biblioteca de Objetos do Microsoft Excel 11.0 na guia COM .
Nota O Microsoft Office 2003 inclui PIAs (assemblies de interoperabilidade primários). O Microsoft Office XP não inclui PIAs, mas eles podem ser baixados.
Clique em OK na caixa de diálogo Adicionar Referências para aceitar suas seleções. Se for solicitado que você gere wrappers para as bibliotecas selecionadas, clique em Sim.
No menu Exibir, selecione Caixa de Ferramentas para exibir a Caixa de Ferramentas. Adicione dois botões e uma caixa de seleção ao Form1.
Defina as propriedades Name e Text da caixa de seleção como FillWithStrings.
Clique duas vezes em Button1. A janela de código do formulário é exibida.
Na janela de código, substitua o seguinte código:
private void button1_Click(object sender, System.EventArgs e) { }
por:
//Declare these two variables globally so you can access them from both //Button1 and Button2. Excel.Application objApp; Excel._Workbook objBook; private void button1_Click(object sender, System.EventArgs e) { Excel.Workbooks objBooks; Excel.Sheets objSheets; Excel._Worksheet objSheet; Excel.Range range; try { // Instantiate Excel and start a new workbook. objApp = new Excel.Application(); objBooks = objApp.Workbooks; objBook = objBooks.Add( Missing.Value ); objSheets = objBook.Worksheets; objSheet = (Excel._Worksheet)objSheets.get_Item(1); //Get the range where the starting cell has the address //m_sStartingCell and its dimensions are m_iNumRows x m_iNumCols. range = objSheet.get_Range("A1", Missing.Value); range = range.get_Resize(5, 5); if (this.FillWithStrings.Checked == false) { //Create an array. double[,] saRet = new double[5, 5]; //Fill the array. for (long iRow = 0; iRow < 5; iRow++) { for (long iCol = 0; iCol < 5; iCol++) { //Put a counter in the cell. saRet[iRow, iCol] = iRow * iCol; } } //Set the range value to the array. range.set_Value(Missing.Value, saRet ); } else { //Create an array. string[,] saRet = new string[5, 5]; //Fill the array. for (long iRow = 0; iRow < 5; iRow++) { for (long iCol = 0; iCol < 5; iCol++) { //Put the row and column address in the cell. saRet[iRow, iCol] = iRow.ToString() + "|" + iCol.ToString(); } } //Set the range value to the array. range.set_Value(Missing.Value, saRet ); } //Return control of Excel to the user. objApp.Visible = true; objApp.UserControl = true; } catch( Exception theException ) { String errorMessage; errorMessage = "Error: "; errorMessage = String.Concat( errorMessage, theException.Message ); errorMessage = String.Concat( errorMessage, " Line: " ); errorMessage = String.Concat( errorMessage, theException.Source ); MessageBox.Show( errorMessage, "Error" ); } }
Nota Você deve alterar o código no Visual Studio 2005. Por padrão, o Visual C# adiciona um formulário ao projeto quando você cria um Windows Forms projeto. O formulário é denominado Form1. Os dois arquivos que representam o formulário são chamados Form1.cs e Form1.designer.cs. Você escreve o código em Form1.cs. O arquivo Form1.designer.cs é onde o designer Windows Forms grava o código que implementa todas as ações executadas arrastando e soltando controles da Caixa de Ferramentas.
Para obter mais informações sobre o designer Windows Forms no Visual C# 2005, visite o seguinte site do MSDN (Microsoft Developer Network):
Retorne ao modo de exibição de design para Form1 e clique duas vezes em Button2.
Na janela de código, substitua o seguinte código:
private void button2_Click(object sender, System.EventArgs e)
{
}
por:
private void button2_Click(object sender, System.EventArgs e)
{
Excel.Sheets objSheets;
Excel._Worksheet objSheet;
Excel.Range range;
try
{
try
{
//Get a reference to the first sheet of the workbook.
objSheets = objBook.Worksheets;
objSheet = (Excel._Worksheet)objSheets.get_Item(1);
}
catch( Exception theException )
{
String errorMessage;
errorMessage = "Can't find the Excel workbook. Try clicking Button1 " +
"to create an Excel workbook with data before running Button2.";
MessageBox.Show( errorMessage, "Missing Workbook?");
//You can't automate Excel if you can't find the data you created, so
//leave the subroutine.
return;
}
//Get a range of data.
range = objSheet.get_Range("A1", "E5");
//Retrieve the data from the range.
Object[,] saRet;
saRet = (System.Object[,])range.get_Value( Missing.Value );
//Determine the dimensions of the array.
long iRows;
long iCols;
iRows = saRet.GetUpperBound(0);
iCols = saRet.GetUpperBound(1);
//Build a string that contains the data of the array.
String valueString;
valueString = "Array Data\n";
for (long rowCounter = 1; rowCounter <= iRows; rowCounter++)
{
for (long colCounter = 1; colCounter <= iCols; colCounter++)
{
//Write the next value into the string.
valueString = String.Concat(valueString,
saRet[rowCounter, colCounter].ToString() + ", ");
}
//Write in a new line.
valueString = String.Concat(valueString, "\n");
}
//Report the value of the array.
MessageBox.Show(valueString, "Array Values");
}
catch( Exception theException )
{
String errorMessage;
errorMessage = "Error: ";
errorMessage = String.Concat( errorMessage, theException.Message );
errorMessage = String.Concat( errorMessage, " Line: " );
errorMessage = String.Concat( errorMessage, theException.Source );
MessageBox.Show( errorMessage, "Error" );
}
}
Role até a parte superior da janela de código. Adicione a seguinte linha ao final da lista de diretivas using:
using System.Reflection; using Excel = Microsoft.Office.Interop.Excel;
Testar o cliente de automação
- Pressione F5 para compilar e executar o programa de exemplo.
- Clique em Button1. O programa inicia o Microsoft Excel com uma nova pasta de trabalho e preenche as células A1:E5 da primeira planilha com dados numéricos de uma matriz.
- Clique em Button2. O programa recupera os dados nas células A1:E5 em uma nova matriz e exibe os resultados em uma caixa de mensagem.
- Selecione FillWithStrings e clique em Button1 para preencher as células A1:E5 com dados de cadeia de caracteres.
Referências
Para obter mais informações, visite o seguinte site do MSDN (Microsoft Developer Network):