Como transferir dados para uma pasta de trabalho do Excel usando Visual translation from VPE for Csharp 2005 ou Visual translation from VPE for Csharp .NET

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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 306023
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 306022.
Para uma versão deste artigo do Microsoft Visual Basic 6.0, consulte 247412.
Sumário
Este artigo passo a passo descreve vários métodos para transferir dados para o Microsoft Excel 2002 a partir de um programa translation from VPE for Csharp .NET Microsoft Visual translation from VPE for Csharp 2005 ou Microsoft Visual. Este artigo também apresenta as vantagens e desvantagens de cada método para que você possa selecionar a solução que funciona melhor para sua situação.

Visão geral

A técnica que é usada com mais freqüência para transferir dados para uma pasta de trabalho do Excel é automação . Com a automação, você pode chamar métodos e propriedades que são específicas para tarefas do Excel. Automação lhe oferece maior flexibilidade para especificar o local dos dados na pasta de trabalho, formatação a pasta de trabalho e fazer várias configurações em tempo de execução.

Com a automação, você pode usar várias técnicas para transferir os dados:
  • Transferir dados célula por célula.
  • Transferir dados em uma matriz para um intervalo de células.
  • Transferir dados de um conjunto de registros ADO para um intervalo de células usando o método CopyFromRecordset .
  • Crie um objeto QueryTable em uma planilha do Excel que contém o resultado de uma consulta em uma fonte de dados ODBC ou OLEDB.
  • Transferir dados para a área de transferência e colar o conteúdo da área de transferência em uma planilha do Excel.
Você também pode usar vários métodos que não necessariamente exigem a automação transferir dados para o Excel. Se você estiver executando um programa do lado do servidor, isso pode ser um bom método para retirar grande parte do processamento de dados dos clientes.

Para transferir os dados sem a automação, você pode usar as seguintes abordagens:
  • Transferir seus dados para um arquivo de texto delimitado por tabulação ou vírgulas que Excel posteriormente pode analisar as células em uma planilha.
  • Transferir seus dados para uma planilha usando o ADO.NET.
  • Transferir dados XML para o Excel (versão 2002 e 2003) para fornecer dados formatados e organizados em linhas e colunas.
Este artigo fornece uma discussão e um exemplo de código para cada uma dessas técnicas. A seção Create the Complete Sample Visual C# 2005 or Visual C# .NET Project, mais adiante neste artigo, demonstra como criar um programa do Visual .NET translation from VPE for Csharp que executa cada técnica.

Técnicas

Usar a automação para transferir dados célula por célula

Com a automação, você pode transferir dados para uma planilha em uma célula por vez:
// Start a new workbook in Excel.m_objExcel = new Excel.Application();m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));// Add data to cells in the first worksheet in the new workbook.m_objSheets = (Excel.Sheets)m_objBook.Worksheets;m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));m_objRange = m_objSheet.get_Range("A1", m_objOpt);m_objRange.Value = "Last Name";m_objRange = m_objSheet.get_Range("B1", m_objOpt);m_objRange.Value = "First Name";m_objRange = m_objSheet.get_Range("A2", m_objOpt);m_objRange.Value = "Doe";m_objRange = m_objSheet.get_Range("B2", m_objOpt);m_objRange.Value = "John";// Apply bold to cells A1:B1.m_objRange = m_objSheet.get_Range("A1", "B1");m_objFont = m_objRange.Font;m_objFont.Bold=true;// Save the Workbook and quit Excel.m_objBook.SaveAs(m_strSampleFolder + "Book1.xls", m_objOpt, m_objOpt, 	m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 	m_objOpt, m_objOpt, m_objOpt, m_objOpt);m_objBook.Close(false, m_objOpt, m_objOpt);m_objExcel.Quit();				
transferir dados célula por célula é um método aceitável se você tiver uma quantidade pequena de dados. Você tem a flexibilidade de colocar dados em qualquer lugar na pasta de trabalho e você pode formatar as células condicionalmente em tempo de execução. No entanto, não é uma boa idéia para usar essa abordagem se você tiver uma grande quantidade de dados para transferir para uma pasta de trabalho do Excel. Cada objeto de intervalo que você adquire em tempo de execução resulta em uma solicitação de interface significa dados transfere mais lentamente. Além disso, o Microsoft Windows 95, Microsoft Windows 98 e Microsoft Windows Millennium Edition (Me) possuem uma limitação 64 kilobytes (KB) em solicitações de interface. Se você tiver mais de 64 KB de solicitações de interface, o servidor de automação (Excel) pode parar de responder ou você pode receber mensagens de erro que indicam pouca memória. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
216400PROBLEMA: Automação COM de processo entre pode travar o aplicativo cliente no Win95/98
Novamente, a transferência de dados célula por célula é aceitável somente para pequenas quantidades de dados. Se você deve transferir grandes conjuntos de dados para o Excel, considere usar uma das outras abordagens são discutidas neste artigo para transferir dados em massa.

Para obter informações adicionais e para obter um exemplo de como automatizar Excel com o Visual translation from VPE for Csharp. NET, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
302084COMO: Automatizar Microsoft Excel do Microsoft Visual translation from VPE for Csharp .NET

Usar a automação para transferir uma matriz de dados para um intervalo em uma planilha

Você pode transferir uma matriz de dados para um intervalo de várias células de uma só vez:
// Start a new workbook in Excel.m_objExcel = new Excel.Application();m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));m_objSheets = (Excel.Sheets)m_objBook.Worksheets;m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));// Create an array for the headers and add it to cells A1:C1.object[] objHeaders = {"Order ID", "Amount", "Tax"};m_objRange = m_objSheet.get_Range("A1", "C1");m_objRange.Value = objHeaders;m_objFont = m_objRange.Font;m_objFont.Bold=true;// Create an array with 3 columns and 100 rows and add it to// the worksheet starting at cell A2.object[,] objData = new Object[100,3];Random rdm = new Random((int)DateTime.Now.Ticks);double nOrderAmt, nTax;for(int r=0;r<100;r++){	objData[r,0] = "ORD" + r.ToString("0000");	nOrderAmt = rdm.Next(1000);	objData[r,1] = nOrderAmt.ToString("c");	nTax = nOrderAmt*0.07;	objData[r,2] = nTax.ToString("c");}m_objRange = m_objSheet.get_Range("A2", m_objOpt);m_objRange = m_objRange.get_Resize(100,3);m_objRange.Value = objData;// Save the Workbook and quit Excel.m_objBook.SaveAs(m_strSampleFolder + "Book2.xls", m_objOpt, m_objOpt, 	m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 	m_objOpt, m_objOpt, m_objOpt, m_objOpt);m_objBook.Close(false, m_objOpt, m_objOpt);m_objExcel.Quit();				
se você transferir os dados usando uma matriz em vez de célula por célula, você pode perceber um ganho enorme de desempenho com uma grande quantidade de dados. Considere as seguintes linhas de código mencionadas anteriormente que transferir dados para 300 células na planilha:
objRange = objSheet.get_Range("A2", m_objOpt);objRange = objRange.get_Resize(100,3);objRange.Value = objData;				
este código representa duas solicitações de interface: um para o objeto Range que retorna o método Range e outra para o objeto Range que retorna o método Resize . Por outro lado, a transferência de dados célula por célula requer solicitações para 300 interfaces para objetos Range . Sempre que possível, você pode beneficiar transferindo seus dados em massa e reduzir o número de solicitações de interface feitas.

Para obter informações adicionais sobre como usar matrizes para obter e definir valores em intervalos com a automação de Excel, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
302096COMO: Automatizar Excel com Visual .NET translation from VPE for Csharp preenchimento ou obter dados em um intervalo usando matrizes

Usar a automação para transferir um conjunto de registros ADO para um intervalo de planilha

Os modelos de objeto para Excel 2000, Excel 2002 e Excel 2003 fornecem o método CopyFromRecordset para transferir um conjunto de registros ADO para um intervalo em uma planilha. O código a seguir ilustra como automatizar o Excel para transferir o conteúdo da tabela Pedidos no banco de dados de exemplo Northwind usando o método CopyFromRecordset :
// Create a Recordset from all the records in the Orders table.ADODB.Connection objConn = new ADODB.Connection();ADODB._Recordset objRS = null;objConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +	m_strNorthwind + ";", "", "", 0);objConn.CursorLocation = ADODB.CursorLocationEnum.adUseClient;object objRecAff;objRS = (ADODB._Recordset)objConn.Execute("Orders", out objRecAff, 	(int)ADODB.CommandTypeEnum.adCmdTable);// Start a new workbook in Excel.m_objExcel = new Excel.Application();m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));m_objSheets = (Excel.Sheets)m_objBook.Worksheets;m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));// Get the Fields collection from the recordset and determine// the number of fields (or columns).System.Collections.IEnumerator objFields = objRS.Fields.GetEnumerator();int nFields = objRS.Fields.Count;// Create an array for the headers and add it to the// worksheet starting at cell A1.object[] objHeaders = new object[nFields];ADODB.Field objField = null;for(int n=0;n<nFields;n++){	objFields.MoveNext();	objField = (ADODB.Field)objFields.Current;	objHeaders[n] = objField.Name;}m_objRange = m_objSheet.get_Range("A1", m_objOpt);m_objRange = m_objRange.get_Resize(1, nFields);m_objRange.Value = objHeaders;m_objFont = m_objRange.Font;m_objFont.Bold=true;// Transfer the recordset to the worksheet starting at cell A2.m_objRange = m_objSheet.get_Range("A2", m_objOpt);m_objRange.CopyFromRecordset(objRS, m_objOpt, m_objOpt);// Save the Workbook and quit Excel.m_objBook.SaveAs(m_strSampleFolder + "Book3.xls", m_objOpt, m_objOpt, 	m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 	m_objOpt, m_objOpt, m_objOpt, m_objOpt);m_objBook.Close(false, m_objOpt, m_objOpt);m_objExcel.Quit();// Close the recordset and connection.objRS.Close();objConn.Close();				
Observação CopyFromRecordset funciona apenas com objetos ADO Recordset . Não é possível usar o DataSet que você criar usando o ADO.NET com o método CopyFromRecordset . Vários exemplos nas seções a seguem demonstram como transferir dados para o Excel com o ADO.NET.

Usar a automação para criar um objeto QueryTable em uma planilha

Um objeto QueryTable representa uma tabela que é criada a partir dados retornados de uma fonte de dados externa. Ao automatizar o Excel, você pode criar um QueryTable fornecendo uma seqüência de conexão para um OLE DB ou uma fonte de dados ODBC e uma seqüência de caracteres SQL. O Excel gera o conjunto de registros e insere o conjunto de registros a planilha no local que você especificar. objetos QueryTable oferecem as seguintes vantagens sobre o método CopyFromRecordset :
  • Excel lida com a criação de conjunto de registros e sua colocação na planilha.
  • Você pode salvar a consulta com o objeto QueryTable e atualizá-la posteriormente para obter um conjunto de registros atualizado.
  • Quando um novo QueryTable é adicionado à sua planilha, você pode especificar que dados que já existem nas células na planilha podem ser para lidar com os novos dados (para obter mais informações, consulte a propriedade RefreshStyle ).
O código a seguir demonstra como automatizar Excel 2000, Excel 2002 ou Excel 2003 para criar um novo QueryTable em uma planilha do Excel usando dados do banco de dados de exemplo Northwind:
// Start a new workbook in Excel.m_objExcel = new Excel.Application();m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));// Create a QueryTable that starts at cell A1.m_objSheets = (Excel.Sheets)m_objBook.Worksheets;m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));m_objRange = m_objSheet.get_Range("A1", m_objOpt);m_objQryTables = m_objSheet.QueryTables;m_objQryTable = (Excel._QueryTable)m_objQryTables.Add(	"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +	m_strNorthwind + ";", m_objRange, "Select * From Orders");m_objQryTable.RefreshStyle = Excel.XlCellInsertionMode.xlInsertEntireRows;m_objQryTable.Refresh(false);// Save the workbook and quit Excel.m_objBook.SaveAs(m_strSampleFolder + "Book4.xls", m_objOpt, m_objOpt, 	m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,	m_objOpt, m_objOpt);m_objBook.Close(false, m_objOpt, m_objOpt);m_objExcel.Quit();				

Use a área de transferência do Windows

Você pode usar a área de transferência do Windows para transferir dados para uma planilha. Para colar dados em várias células em uma planilha, você pode copiar uma seqüência em que as colunas são delimitadas por caracteres TAB e as linhas são delimitadas por retornos de carro. O código a seguir ilustra como o Visual translation from VPE for Csharp .NET pode usar a área de transferência do Windows para transferir dados para o Excel:
// Copy a string to the Windows clipboard.string sData = "FirstName\tLastName\tBirthdate\r\n"  +	"Bill\tBrown\t2/5/85\r\n"  +	"Joe\tThomas\t1/1/91";System.Windows.Forms.Clipboard.SetDataObject(sData);// Start a new workbook in Excel.m_objExcel = new Excel.Application();m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));// Paste the data starting at cell A1.m_objSheets = (Excel.Sheets)m_objBook.Worksheets;m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));m_objRange = m_objSheet.get_Range("A1", m_objOpt);m_objSheet.Paste(m_objRange, false);// Save the workbook and quit Excel.m_objBook.SaveAs(m_strSampleFolder + "Book5.xls", m_objOpt, m_objOpt, 	m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,	m_objOpt, m_objOpt);m_objBook.Close(false, m_objOpt, m_objOpt);m_objExcel.Quit();				

Criar um arquivo texto delimitado por que o Excel pode analisar em linhas e colunas

Excel pode abrir arquivos delimitado por tabulação ou vírgula e analisar corretamente os dados em células. Você pode usar esse recurso quando desejar transferir uma grande quantidade de dados para uma planilha com pouca, se houver, automação. Talvez uma boa abordagem para um programa cliente servidor o arquivo de texto pode ser gerado no lado do servidor. Em seguida, você pode abrir o arquivo de texto no cliente, usando a automação onde for apropriado.

O seguinte código ilustra como gerar um arquivo de texto delimitado por tabulação a partir de dados que é lido com o ADO.NET:
// Connect to the data source.System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection( 	"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strNorthwind + ";");objConn.Open();// Execute a command to retrieve all records from the Employees table.System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand( 	"Select * From Employees", objConn);System.Data.OleDb.OleDbDataReader objReader;objReader = objCmd.ExecuteReader();// Create the FileStream and StreamWriter object to write // the recordset contents to file.System.IO.FileStream fs = new System.IO.FileStream(	m_strSampleFolder + "Book6.txt", System.IO.FileMode.Create);System.IO.StreamWriter sw = new System.IO.StreamWriter(	fs, System.Text.Encoding.Unicode);// Write the field names (headers) as the first line in the text file.sw.WriteLine(objReader.GetName(0) +  "\t" + objReader.GetName(1) +	"\t" + objReader.GetName(2) + "\t" + objReader.GetName(3) +	"\t" + objReader.GetName(4) + "\t" + objReader.GetName(5));// Write the first six columns in the recordset to a text file as// tab-delimited.while(objReader.Read()) {	for(int i=0;i<=5;i++)	{		if(!objReader.IsDBNull(i))		{			string s;			s = objReader.GetDataTypeName(i);			if(objReader.GetDataTypeName(i)=="DBTYPE_I4")			{				sw.Write(objReader.GetInt32(i).ToString());			}			else if(objReader.GetDataTypeName(i)=="DBTYPE_DATE")			{				sw.Write(objReader.GetDateTime(i).ToString("d"));			}			else if (objReader.GetDataTypeName(i)=="DBTYPE_WVARCHAR")			{				sw.Write(objReader.GetString(i));			}		}		if(i<5) sw.Write("\t");	}	sw.WriteLine(); }sw.Flush();	// Write the buffered data to the filestream.// Close the FileStream.fs.Close();// Close the reader and the connection.objReader.Close();objConn.Close(); 				
o código já mencionado não usa nenhuma automação. No entanto, se desejar, você pode usar automação para abrir o arquivo de texto e salve o arquivo no formato de pasta de trabalho do Excel, semelhante a este:
// Open the text file in Excel.m_objExcel = new Excel.Application();m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;m_objBooks.OpenText(m_strSampleFolder + "Book6.txt", Excel.XlPlatform.xlWindows, 1, 	Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote,	false, true, false, false, false, false, m_objOpt, m_objOpt, 	m_objOpt, m_objOpt, m_objOpt);m_objBook = m_objExcel.ActiveWorkbook;// Save the text file in the typical workbook format and quit Excel.m_objBook.SaveAs(m_strSampleFolder + "Book6.xls", Excel.XlFileFormat.xlWorkbookNormal, 	m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,	m_objOpt, m_objOpt);m_objBook.Close(false, m_objOpt, m_objOpt);m_objExcel.Quit();				

Transferir dados para uma planilha usando o ADO.NET

Você pode usar o provedor Microsoft Jet OLE DB para adicionar registros a uma tabela em uma pasta de trabalho do Excel existente. Uma tabela no Excel é simplesmente um intervalo de células; o intervalo pode ter um nome definido. Normalmente, a primeira linha do intervalo contém os cabeçalhos (ou nomes de campo) e todas as linhas posteriores no intervalo contêm os registros.

O código a seguir adiciona dois novos registros a uma tabela no Book7.xls. A tabela nesse caso é Sheet1:
// Establish a connection to the data source.System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(	"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strSampleFolder +	"Book7.xls;Extended Properties=Excel 8.0;");objConn.Open();// Add two records to the table named 'MyTable'.System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand();objCmd.Connection = objConn;objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +	" values ('Bill', 'Brown')";objCmd.ExecuteNonQuery();objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +	" values ('Joe', 'Thomas')";objCmd.ExecuteNonQuery();// Close the connection.objConn.Close();				
quando você adicionar registros com o ADO.NET, como mostrado neste exemplo, a formatação na pasta de trabalho é mantida. Cada registro é adicionado a uma linha usa a formatação da linha antes dele.

Para obter informações adicionais sobre como usar o ADO.NET, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
306636COMO: Conectar-se a um banco de dados e executar um comando usando o ADO.NET e Visual translation from VPE for Csharp .NET
314145COMO: Popular um objeto DataSet de um banco de dados usando o Visual translation from VPE for Csharp .NET
307587COMO: Atualizar um banco de dados de um objeto DataSet usando o Visual translation from VPE for Csharp .NET
Para obter informações adicionais sobre como usar o provedor Jet OLE DB com fontes de dados do Excel, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
316934COMO: Usar o ADO.NET para recuperar e modificar registros em uma pasta de trabalho Excel com Visual Basic .NET
278973EXEMPLO: ExcelADO demonstra como usar ADO para ler e gravar dados em pastas de trabalho do Excel
257819COMO: Usar o ADO com dados do Excel do Visual Basic ou VBA

Transferir dados XML (Excel 2002 e Excel 2003)

Excel 2002 e 2003 pode abrir qualquer arquivo XML que está bem formado. Você pode abrir arquivos XML diretamente, usando o comando Abrir no menu arquivo , ou programaticamente usando o Abrir ou OpenXML métodos da coleção Workbooks . Se você criar arquivos XML para uso no Excel, você também pode criar folhas de estilos para formatar os dados.

Para obter informações adicionais sobre como usar XML com o Excel 2002, clique nos números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
307029COMO: Transferir dados XML para Microsoft Excel 2002 usando o .NET translation from VPE for Csharp Visual
288215INFO: Microsoft Excel 2002 e XML

Criar o projeto .NET translation from VPE for Csharp Visual do exemplo concluído

  1. Crie uma nova pasta chamada C:\ExcelData. O programa de exemplo armazenará as pastas de trabalho do Excel nesta pasta.
  2. Crie uma nova pasta de trabalho para o exemplo gravar:
    1. Inicie uma nova pasta de trabalho no Excel.
    2. Na Plan1 da nova pasta de trabalho, digite o nome na célula A1 e Sobrenome na célula B1.
    3. Selecione a1: B1.
    4. No menu Inserir , aponte para nome e, em seguida, clique em Definir . Digite o nome MyTable e, em seguida, clique em OK .
    5. Salve a pasta de trabalho como C:\Exceldata\Book7.xls .
    6. Feche o Excel.
  3. Inicie Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005. No menu arquivo , aponte para novo e, em seguida, clique em Project . Em projetos translation from VPE for Csharp Visual ou translation from VPE for Csharp Visual , selecione Windows Application . Por padrão, é criado o Form1.
  4. Adicione uma referência para a biblioteca de objetos do Excel e o assembly de interoperabilidade primária ADODB. Para fazer isso, execute as seguintes etapas:
    1. No menu Project , clique em Add Reference .
    2. Na guia NET , localizar ADODB e, em seguida, clique em Selecionar .

      Observação No Visual Studio 2005, você não tem clique em Selecionar .
    3. Na guia COM , localize Microsoft Excel 11.0 Object Library ou biblioteca de objetos do Microsoft Excel 10.0 e, em seguida, clique em Selecionar .

      Observação No Visual Studio 2005, você não tem clique em Selecionar .

      Observação Se você estiver usando o Microsoft Excel 2002 e você ainda não fez isso, a Microsoft recomenda que você baixe e instale os Microsoft Office XP assemblies de interoperabilidade primários (PIAs). Para obter mais informações sobre PIAs do Office XP, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
      328912INFO: Microsoft Office XP PIAs estão disponíveis para download
    4. Na caixa de diálogo Add References , clique em OK para aceitar as seleções.
  5. Adicione um controle de Caixa de combinação e um controle de botão ao Form1.
  6. Adicione manipuladores de eventos para o evento de formulário carga e os eventos Click do controle de botão:
    1. No modo de design para Form1.cs, clique duas vezes em Form1 .

      O manipulador de evento de Load do formulário é criado e aparece no Form1.cs.
    2. No menu Exibir , clique em Designer para alternar para modo de design.
    3. Clique duas vezes em Button1 .

      O manipulador para o evento Click do botão é criado e aparece no Form1.cs.
  7. In Form1.cs, replace the following code:
    private void Form1_Load(object sender, System.EventArgs e){}private void button1_Click(object sender, System.EventArgs e){}					
    with:
            // Excel object references.        private Excel.Application m_objExcel =  null;        private Excel.Workbooks m_objBooks = null;        private Excel._Workbook m_objBook = null;        private Excel.Sheets m_objSheets = null;        private Excel._Worksheet m_objSheet = null;        private Excel.Range m_objRange =  null;        private Excel.Font m_objFont = null;        private Excel.QueryTables m_objQryTables = null;        private Excel._QueryTable m_objQryTable = null;        // Frequenty-used variable for optional arguments.        private object m_objOpt = System.Reflection.Missing.Value;        // Paths used by the sample code for accessing and storing data.        private object m_strSampleFolder = "C:\\ExcelData\\";        private string m_strNorthwind = "C:\\Program Files\\Microsoft Office\\Office10\\Samples\\Northwind.mdb";        private void Form1_Load(object sender, System.EventArgs e)        {			            comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;            comboBox1.Items.AddRange(new object[]{                                                     "Use Automation to Transfer Data Cell by Cell ",                                                      "Use Automation to Transfer an Array of Data to a Range on a Worksheet ",                                                      "Use Automation to Transfer an ADO Recordset to a Worksheet Range ",                                                      "Use Automation to Create a QueryTable on a Worksheet",                                                      "Use the Clipboard",                                                      "Create a Delimited Text File that Excel Can Parse into Rows and Columns",                                                      "Transfer Data to a Worksheet Using ADO.NET "});            comboBox1.SelectedIndex = 0;            button1.Text = "Go!";        }        private void button1_Click(object sender, System.EventArgs e)        {            switch (comboBox1.SelectedIndex)            {                case 0 : Automation_CellByCell(); break;                case 1 : Automation_UseArray(); break;                case 2 : Automation_ADORecordset(); break;                case 3 : Automation_QueryTable(); break;                case 4 : Use_Clipboard(); break;                case 5 : Create_TextFile(); break;                case 6 : Use_ADONET(); break;            }	            //Clean-up            m_objFont = null;            m_objRange = null;            m_objSheet = null;            m_objSheets = null;            m_objBooks = null;            m_objBook = null;            m_objExcel = null;            GC.Collect();        }        private void Automation_CellByCell()        {            // Start a new workbook in Excel.            m_objExcel = new Excel.Application();            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;            m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));            // Add data to cells of the first worksheet in the new workbook.            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));            m_objRange = m_objSheet.get_Range("A1", m_objOpt);            m_objRange.set_Value(m_objOpt,"Last Name");            m_objRange = m_objSheet.get_Range("B1", m_objOpt);            m_objRange.set_Value(m_objOpt,"First Name");            m_objRange = m_objSheet.get_Range("A2", m_objOpt);            m_objRange.set_Value(m_objOpt,"Doe");            m_objRange = m_objSheet.get_Range("B2", m_objOpt);            m_objRange.set_Value(m_objOpt,"John");            // Apply bold to cells A1:B1.            m_objRange = m_objSheet.get_Range("A1", "B1");            m_objFont = m_objRange.Font;            m_objFont.Bold=true;            // Save the workbook and quit Excel.            m_objBook.SaveAs(m_strSampleFolder + "Book1.xls", m_objOpt, m_objOpt,                 m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,                 m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);            m_objBook.Close(false, m_objOpt, m_objOpt);            m_objExcel.Quit();        }        private void Automation_UseArray()        {            // Start a new workbook in Excel.            m_objExcel = new Excel.Application();            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;            m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));            // Create an array for the headers and add it to cells A1:C1.            object[] objHeaders = {"Order ID", "Amount", "Tax"};            m_objRange = m_objSheet.get_Range("A1", "C1");            m_objRange.set_Value(m_objOpt,objHeaders);            m_objFont = m_objRange.Font;            m_objFont.Bold=true;            // Create an array with 3 columns and 100 rows and add it to            // the worksheet starting at cell A2.            object[,] objData = new Object[100,3];            Random rdm = new Random((int)DateTime.Now.Ticks);            double nOrderAmt, nTax;            for(int r=0;r<100;r++)            {                objData[r,0] = "ORD" + r.ToString("0000");                nOrderAmt = rdm.Next(1000);                objData[r,1] = nOrderAmt.ToString("c");                nTax = nOrderAmt*0.07;                objData[r,2] = nTax.ToString("c");            }            m_objRange = m_objSheet.get_Range("A2", m_objOpt);            m_objRange = m_objRange.get_Resize(100,3);            m_objRange.set_Value(m_objOpt,"objData");                        // Save the workbook and quit Excel.            m_objBook.SaveAs(m_strSampleFolder + "Book2.xls", m_objOpt, m_objOpt,                 m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,                 m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);            m_objBook.Close(false, m_objOpt, m_objOpt);            m_objExcel.Quit();        }        private void Automation_ADORecordset()        {            // Create a Recordset from all the records in the Orders table.            ADODB.Connection objConn = new ADODB.Connection();            ADODB._Recordset objRS = null;            objConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +                m_strNorthwind + ";", "", "", 0);            objConn.CursorLocation = ADODB.CursorLocationEnum.adUseClient;            object objRecAff;            objRS = (ADODB._Recordset)objConn.Execute("Orders", out objRecAff,                 (int)ADODB.CommandTypeEnum.adCmdTable);            // Start a new workbook in Excel.            m_objExcel = new Excel.Application();            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;            m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));            // Get the Fields collection from the recordset and determine            // the number of fields (or columns).            System.Collections.IEnumerator objFields = objRS.Fields.GetEnumerator();            int nFields = objRS.Fields.Count;            // Create an array for the headers and add it to the            // worksheet starting at cell A1.            object[] objHeaders = new object[nFields];            ADODB.Field objField = null;            for(int n=0;n<nFields;n++)            {                objFields.MoveNext();                objField = (ADODB.Field)objFields.Current;                objHeaders[n] = objField.Name;            }            m_objRange = m_objSheet.get_Range("A1", m_objOpt);            m_objRange = m_objRange.get_Resize(1, nFields);            m_objRange.set_Value(m_objOpt,objHeaders);            m_objFont = m_objRange.Font;            m_objFont.Bold=true;            // Transfer the recordset to the worksheet starting at cell A2.            m_objRange = m_objSheet.get_Range("A2", m_objOpt);            m_objRange.CopyFromRecordset(objRS, m_objOpt, m_objOpt);            // Save the workbook and quit Excel.            m_objBook.SaveAs(m_strSampleFolder + "Book3.xls", m_objOpt, m_objOpt,                 m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange,                 m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);            m_objBook.Close(false, m_objOpt, m_objOpt);            m_objExcel.Quit();            //Close the recordset and connection            objRS.Close();            objConn.Close();        }        private void Automation_QueryTable()        {            // Start a new workbook in Excel.            m_objExcel = new Excel.Application();            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;            m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));            // Create a QueryTable that starts at cell A1.            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));            m_objRange = m_objSheet.get_Range("A1", m_objOpt);            m_objQryTables = m_objSheet.QueryTables;            m_objQryTable = (Excel._QueryTable)m_objQryTables.Add(                "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +                m_strNorthwind + ";", m_objRange, "Select * From Orders");            m_objQryTable.RefreshStyle = Excel.XlCellInsertionMode.xlInsertEntireRows;            m_objQryTable.Refresh(false);            // Save the workbook and quit Excel.            m_objBook.SaveAs(m_strSampleFolder + "Book4.xls", m_objOpt, m_objOpt,                 m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,                m_objOpt, m_objOpt, m_objOpt);            m_objBook.Close(false, m_objOpt, m_objOpt);            m_objExcel.Quit();        }        private void Use_Clipboard()        {            // Copy a string to the clipboard.            string sData = "FirstName\tLastName\tBirthdate\r\n"  +                "Bill\tBrown\t2/5/85\r\n"  +                "Joe\tThomas\t1/1/91";            System.Windows.Forms.Clipboard.SetDataObject(sData);            // Start a new workbook in Excel.            m_objExcel = new Excel.Application();            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;            m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));            // Paste the data starting at cell A1.            m_objSheets = (Excel.Sheets)m_objBook.Worksheets;            m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));            m_objRange = m_objSheet.get_Range("A1", m_objOpt);            m_objSheet.Paste(m_objRange, false);            // Save the workbook and quit Excel.            m_objBook.SaveAs(m_strSampleFolder + "Book5.xls", m_objOpt, m_objOpt,                 m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,                m_objOpt, m_objOpt, m_objOpt);            m_objBook.Close(false, m_objOpt, m_objOpt);            m_objExcel.Quit();        }        private void Create_TextFile()        {            // Connect to the data source.            System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(                 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strNorthwind + ";");            objConn.Open();            // Execute a command to retrieve all records from the Employees  table.            System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand(                 "Select * From Employees", objConn);            System.Data.OleDb.OleDbDataReader objReader;            objReader = objCmd.ExecuteReader();            // Create the FileStream and StreamWriter object to write             // the recordset contents to file.            System.IO.FileStream fs = new System.IO.FileStream(                m_strSampleFolder + "Book6.txt", System.IO.FileMode.Create);            System.IO.StreamWriter sw = new System.IO.StreamWriter(                fs, System.Text.Encoding.Unicode);            // Write the field names (headers) as the first line in the text file.            sw.WriteLine(objReader.GetName(0) +  "\t" + objReader.GetName(1) +                "\t" + objReader.GetName(2) + "\t" + objReader.GetName(3) +                "\t" + objReader.GetName(4) + "\t" + objReader.GetName(5));            // Write the first six columns in the recordset to a text file as            // tab-delimited.            while(objReader.Read())             {                for(int i=0;i<=5;i++)                {                    if(!objReader.IsDBNull(i))                    {                        string s;                        s = objReader.GetDataTypeName(i);                        if(objReader.GetDataTypeName(i)=="DBTYPE_I4")                        {                            sw.Write(objReader.GetInt32(i).ToString());                        }                        else if(objReader.GetDataTypeName(i)=="DBTYPE_DATE")                        {                            sw.Write(objReader.GetDateTime(i).ToString("d"));                        }                        else if (objReader.GetDataTypeName(i)=="DBTYPE_WVARCHAR")                        {                            sw.Write(objReader.GetString(i));                        }                    }                    if(i<5) sw.Write("\t");                }                sw.WriteLine();             }            sw.Flush();	// Write the buffered data to the FileStream.            // Close the FileStream.            fs.Close();            // Close the reader and the connection.            objReader.Close();            objConn.Close();             // ==================================================================            // Optionally, automate Excel to open the text file and save it in the            // Excel workbook format.            // Open the text file in Excel.            m_objExcel = new Excel.Application();            m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;            m_objBooks.OpenText(m_strSampleFolder + "Book6.txt", Excel.XlPlatform.xlWindows, 1,                 Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote,                false, true, false, false, false, false, m_objOpt, m_objOpt,                 m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);            m_objBook = m_objExcel.ActiveWorkbook;            // Save the text file in the typical workbook format and quit Excel.            m_objBook.SaveAs(m_strSampleFolder + "Book6.xls", Excel.XlFileFormat.xlWorkbookNormal,                 m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,                m_objOpt, m_objOpt, m_objOpt);            m_objBook.Close(false, m_objOpt, m_objOpt);            m_objExcel.Quit();        }        private void Use_ADONET()        {            // Establish a connection to the data source.            System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strSampleFolder +                "Book7.xls;Extended Properties=Excel 8.0;");            objConn.Open();            // Add two records to the table named 'MyTable'.            System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand();            objCmd.Connection = objConn;            objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +                " values ('Bill', 'Brown')";	            objCmd.ExecuteNonQuery();            objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +                " values ('Joe', 'Thomas')";            objCmd.ExecuteNonQuery();            // Close the connection.            objConn.Close();         } 	}  // End Class}// End namespace					
    Observe você deve alterar o código no Visual Studio 2005. Por padrão, Visual translation from VPE for Csharp adiciona um formulário para o projeto quando você cria um projeto Windows Forms. O formulário é denominado Form1. Os dois arquivos que representam o formulário são denominados Form1.cs e Form1.Designer.cs. Escrever o código no Form1.cs. O arquivo Form1.Designer.cs é onde o Windows Forms Designer escreve o código que implementa todas as ações que você executou arrastando e soltando controles da caixa de ferramentas.

    Para obter mais informações sobre o Windows Forms Designer no Visual translation from VPE for Csharp 2005, visite o seguinte site da Web Microsoft Developer Network (MSDN): Observação Se você não instalou o Office para a pasta padrão (c:\Arquivos de Programas\Microsoft Office), modifique a constante m_strNorthwind no exemplo de código para corresponder ao seu caminho de instalação para Northwind.mdb.
  8. Adicione o seguinte para as diretivas de uso no Form1.cs:
    	using System.Reflection;	using System.Runtime.InteropServices;	using Excel = Microsoft.Office.Interop.Excel;					
  9. Pressione F5 para criar e executar a amostra.

REFERÊNCIAS

Para obter mais informações, visite o seguinte site:

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 306023 - Última Revisão: 12/11/2006 20:14:48 - Revisão: 7.5

Microsoft Excel 2002 Standard Edition, Microsoft Visual C# 2005, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft ADO.NET 1.0

  • kbmt kbautomation kbhowtomaster KB306023 KbMtpt
Comentários