Como é de costume, sempre compartilho a minhas experiências e necessidades do dia a dia com você.
Recentemente tive a necessidade de ler um arquivo Excel em um WebService, porem o servidor na qual está hospedado não possui o Office instalado e nem poderia porque no final das contas seria necessário instala-lo em 3 servidores.
Com isso comecei a procurar por soluções e até que cheguei a solução criada pelo chinês Liu Junfeng que tambem possui uma materia no site do Code Project e seu fonte disponível no Google Code.
Os exemplos que se seguem poderão ser utilizado tanto em Windows Form quanto em Web Form. Então vamos ao que interessa.
Efetuando a leitura de um arquivo excel.
Crie um novo ASP.NET Web Site.
Iremos fazer referência ao Excel Library em nosso projeto. Clique com o botão direito
Adicione nele 1 FileUpload, 1 Button e 1 GridView. Nesse exemplo iremos fazer upload de um arquivo do Excel e exibi-lo em nosso GridView.
Agora vamos atribuir nosso código ao Button. Com isso, dé um duplo clique no Button e no evento dele criado iremos atribuir o código abaixo.
protected void btnProcessarExcel_Click(object sender, EventArgs e)
{
if (fupArquivo.HasFile)
{
// Recebe o arquivo em array de bytes
byte[] buffer = fupArquivo.FileBytes;
// Criar o arquivo em memoria
System.IO.MemoryStream stream = new System.IO.MemoryStream(buffer);
// Carrega o WorkBook do Excel
ExcelLibrary.SpreadSheet.Workbook workbook = ExcelLibrary.SpreadSheet.Workbook.Load(stream);
// Recupera o primeiro WorkSheet
ExcelLibrary.SpreadSheet.Worksheet worksheet = workbook.Worksheets[0];
// Cria uma tabela para armazenar o Excel
System.Data.DataTable dtExcel = new System.Data.DataTable();
dtExcel.Columns.Add("Coluna0", typeof(string));
dtExcel.Columns.Add("Coluna1", typeof(string));
// Percorre as linhas do Excel
for (int rowIndex = worksheet.Cells.FirstRowIndex; rowIndex <= worksheet.Cells.LastRowIndex; rowIndex++)
{
// Recupera a linha do Excel
ExcelLibrary.SpreadSheet.Row row = worksheet.Cells.GetRow(rowIndex);
// Adiciona os dados na tabela
System.Data.DataRow newRow = dtExcel.NewRow();
newRow["Coluna0"] = row.GetCell(0).StringValue;
newRow["Coluna1"] = row.GetCell(1).StringValue;
dtExcel.Rows.Add(newRow);
}
// Adicona a tabela com os dados do Excel no Grid
gridExcelProcessado.DataSource = dtExcel;
gridExcelProcessado.DataBind();
}
}
O código acima será executado quando o Button for clicado. O código irá verificar se o arquivo na qual foi feito o upload é válido e irá processa-lo. Os dados serão atribuidos em uma tabela para que possamos apresenta-lo em nosso Grid.
Criando um arquivo Excel
Para criarmos um arquivo do Excel é bem mais simples. O código abaixo deixa isso bem claro. Instanciamos nosso WorkBook e WorkSheet e adicionamos os valores nas celular e para concluir adicionamos nosso WorkSheet no WorkBook e em seguida é só salvar.
string file = "C:\\excel_exemplo.xls";
ExcelLibrary.SpreadSheet.Workbook workbook = new ExcelLibrary.SpreadSheet.Workbook();
ExcelLibrary.SpreadSheet.Worksheet worksheet = new ExcelLibrary.SpreadSheet.Worksheet("Planilha1");
worksheet.Cells[0, 0] = new ExcelLibrary.SpreadSheet.Cell("Cliente1");
worksheet.Cells[0, 1] = new ExcelLibrary.SpreadSheet.Cell("2344,89");
worksheet.Cells[1, 0] = new ExcelLibrary.SpreadSheet.Cell("Cliente2");
worksheet.Cells[1, 1] = new ExcelLibrary.SpreadSheet.Cell("1342,00");
worksheet.Cells[2, 0] = new ExcelLibrary.SpreadSheet.Cell("Cliente3");
worksheet.Cells[2, 1] = new ExcelLibrary.SpreadSheet.Cell("7634,78");
worksheet.Cells[3, 0] = new ExcelLibrary.SpreadSheet.Cell("Cliente4");
worksheet.Cells[3, 1] = new ExcelLibrary.SpreadSheet.Cell("4322,44");
workbook.Worksheets.Add(worksheet);
workbook.Save(file);
Vale lembrar que o Excel Library é uma excelente alternativa, que no meu caso foi de grande ajuda.
Agora é só explorar os recursos e mão a obra.
Irei deixar para você o projeto criado no artigo para download aqui.
Abraço e até a próxima.
Posts relacionados:
- Vem ai a semana de Interoperabilidade
- Exportando dados do GridView para Excel
- Dica – Converter um DataSet em XML
- Fórum C-Sharp
- Como Programar com ASP.NET e C# – Editora Novatec
Postado em ASP.NET, C#, Dicas, Interoperabilidade, VB.NET, Visual Studio | Marcado como .NET, ASP.NET, C#, Dicas, Framework, MemoryStream, VB.NET, Visual Studio, WebForm, WebService, WinForm








Quando é winform, eu não tenho a opção HasFile, o que fazer nesse caso?
Olá Coimbra,
No caso do WinForm que você precisa de pegar o arquivo em array de byte (byte[]) você irá utilizar o System.IO.FileStream. Segue abaixo o exemplo.
string path_do_arquivo = @"C:\meu_arquivo_excel.xls";
if (System.IO.File.Exists(path_do_arquivo))
{
System.IO.FileStream stream = new System.IO.FileStream(arquivo, System.IO.FileMode.Open);
...
}
Depois basta utilizar a variável stream para fazer o load.
Abraço
Muito bom este artigo.Altamente didatico e util.Parabéns.Continue postando e ajudando todos os programadores e usuarios apavorados…
Cara, esta biblioteca é bacana e o exemplo que você deu foi ótimo, porém as funcionalidades de alterar a cor de fundo da planilha não consegui fazer funcionar, você sabe se as funcionalidades de formatação da celula funcionam?
Parabéns pelo artigo, muito bom !!!
Alguma dica pro excel 2007?
Nesse caso você deverá usar a interoperabilidade do Office mesmo. Não conheço nenhuma outra solução.
Se souber, envie a dica para nós.
Abraço
amigo boa tarde , voce tem alguma solução para Office 2007 ou 2010 . tem alguma dica ?
Abs e parabéns pelo tópico show!!!!
Obrigado André! Nesse caso que eu começa somente utilizando interoperabilidade do office. Mais prometo que se encontrar algo escrevo um artigo sobre o assunto.
Abraço e obrigado por visitar o C# Brasil!
Olá Raphael.
Estou com W7 office 2010 e Visual Studio 2010 Ultimate.
Eu tenho projeto Winform com 3 Arrays. myArray1[240,18], myArray2[240,18] e myArray3[8,18].
Preciso salvar estes dados em um arquivo Excel .xls. myArray1 na Plan1, myArray2 na Plan2 e myArray3 na Plan3.
Como fazer isso em xls?
Preciso que após ser salvo as dados, o arquivo seja aberto no Excel e já rode uma macro que gera um gráfico a partir de uma seleção destes dados.
Qualquer ajuda é valorosa!
Abraços e sucesso,
silvio pontes
Oi Raphael.
Você disse interoperabilidade do office.
Posso entender como macros?
Abraços,
silvio pontes
Seria integração com o office. Possibilita você usar recursos do office e até gerar arquivos do excel, powerpoint, word. No seu caso e possível gerar a planilha e acredito que até macro.
Em um projeto na empresa que trabalho fiz um que gera uma planilha com fórmula e preenchida com dados de uma base sql server.
Eu Gero o Xls com a Classe e da erro de leitura nao abre o arquivo, Office 2010