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.