7 de dezembro de 2014

Ler arquivos XLS e XLSX utilizando NPOI em C#

Editar postagem
Uma maneira de ler arquivos XLS e XLSX utilizando C# é através da biblioteca NPOI, ela nos permite ler esses tipos de arquivos sem a necessidade de termos o Microsoft Excel instalado, o que em alguns casos pode ocorrer. Para começar, devemos baixar os arquivos binários nesse link e depois adicioná-los as referências do nosso projeto, feito isso podemos começar.

A primeira coisa que devemos fazer é importar os namespaces que iremos utilizar, que são:
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel; // para arquivos XLS
using NPOI.XSSF.UserModel; // para arquivos XLSX
Existe uma diferença nas classes que são utilizadas em arquivos XLS e em arquivos XLSX, quando usamos arquivos XLS as classes que devemos utilizar começam com a letra H, por exemplo: HSSFWorkbook, HSSFSheet, HSSFRow, HSSFCell, etc. Para arquivos arquivos XLSX as classes começam com a letra X: XSSFWorkbook, XSSFSheet, XSSFRow, XSSFCell, etc. No exemplo que vou mostrar, irei ler um arquivo XLS e escrever seu conteúdo em um RichTextBox:

// utiliza um OpenFileDialog para selecionar o arquivo XLS
DialogResult resultado = ofdArquivos.ShowDialog();
// verifica se o usuário selecionou um arquivo
if (resultado == DialogResult.OK)
{
    // abre o arquivo para leitura
    FileStream arquivoXLS = new FileStream(ofdArquivos.FileName, FileMode.Open, FileAccess.Read);
    // recupera o Workbook do arquivo
    HSSFWorkbook workbook = new HSSFWorkbook(arquivoXLS);
    // recupera a Sheet de nome Plan1
    HSSFSheet sheet = (HSSFSheet)workbook.GetSheet("Plan1");

    // recupera as linhas da Sheet
    IEnumerator linhas = sheet.GetRowEnumerator();
    // enquanto existirem linhas
    while (linhas.MoveNext())
    {
        // recupera as células da linha atual
        IEnumerator celulas = ((HSSFRow)linhas.Current).Cells.GetEnumerator();
        // enquanto existirem células
        while (celulas.MoveNext())
        {
            // recupera a célula atual
            HSSFCell celula = ((HSSFCell)celulas.Current);
            // verifica o tipo de célula para ler seu conteúdo
            switch (celula.CellType)
            {
                case CellType.Blank:
                    // adiciona conteúdo no RichTextBox
                    rtbPlanilha.AppendText("\t");
                    break;
                case CellType.Boolean:
                    // adiciona conteúdo no RichTextBox
                    rtbPlanilha.AppendText(celula.BooleanCellValue + "\t");
                    break;
                case CellType.Error:
                    // adiciona conteúdo no RichTextBox
                    rtbPlanilha.AppendText(celula.ErrorCellValue + "\t");
                    break;
                case CellType.Formula:
                    // adiciona conteúdo no RichTextBox
                    rtbPlanilha.AppendText(celula.CellFormula + "\t");
                    break;
                case CellType.Numeric:
                    // adiciona conteúdo no RichTextBox
                    rtbPlanilha.AppendText(celula.NumericCellValue + "\t");
                    break;
                case CellType.String:
                    // adiciona conteúdo no RichTextBox
                    rtbPlanilha.AppendText(celula.StringCellValue + "\t");
                    break;
            }
        }
        // quebra de linha
        rtbPlanilha.AppendText("\n");
    }

    // fecha o arquivo XLS
    arquivoXLS.Close();
}
else
{
    // exibe mensagem
    MessageBox.Show("Nenhum arquivo foi selecionado.", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Para fazer a mesma coisa, porém com arquivos XLSX, basta trocar o H pelo X.

ler arquivos xls xlsx npoi csharp



Google Docs

Nenhum comentário:

Postar um comentário