C# y Excel: Cómo leer un rango de celdas

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Excel = Microsoft.Office.Interop.Excel;

namespace my_excel
{
    class Program
    {
        static void Main(string[] args)
        {
            // archivo de entrada
            string file = "libro.xls";
            string dir = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            string xlsFilePath = Path.Combine(dir, file);

            read_file(xlsFilePath);

            Console.ReadKey();
            
            
        }

        public static void read_file(string xlsFilePath)
        {
            if (!File.Exists(xlsFilePath))
                return;

            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            Excel.Range range;
            var misValue = Type.Missing;//System.Reflection.Missing.Value;

            // abrir el documento
            xlApp = new Excel.ApplicationClass();
            xlWorkBook = xlApp.Workbooks.Open(xlsFilePath, misValue, misValue,
                misValue, misValue, misValue, misValue, misValue, misValue,
                misValue, misValue, misValue, misValue, misValue, misValue);

            // seleccion de la hoja de calculo
            // get_item() devuelve object y numera las hojas a partir de 1
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

            // seleccion rango activo
            range = xlWorkSheet.UsedRange;


            // leer las celdas
            int rows = range.Rows.Count;
            int cols = range.Columns.Count;


            for (int row = 1; row <= rows; row++)
            {
                for (int col = 1; col <= cols; col++)
                {

                    // lectura como cadena
                    string str_value = (range.Cells[row, col] as Excel.Range).Value2.ToString();

                    // conversion
                    int int_value = Convert.ToInt32(str_value, 10);

                    Console.WriteLine("string:{0}", str_value);
                    Console.WriteLine("int:{0}", int_value);
                }


            }


            // cerrar
            xlWorkBook.Close(false, misValue, misValue);
            xlApp.Quit();

            // liberar
            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);

        }


        public static void releaseObject(object obj) 
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Unable to release the object(object:{0})", obj.ToString());
            }
            finally 
            {
                obj = null;
                GC.Collect();
            }
        }
    }
}

Fuente:
CSharp
DotNetPerls

13 comentarios en “C# y Excel: Cómo leer un rango de celdas

  1. Muchisimas gracias por compartir esto amigo. Como decia el compañero, mucho mejor que los ejemplos que hay en Microsoft o lo que te encuentras en stackoverflow, que se centran en el acceso mediante OleDB

  2. Hola no se como hacer esto pues trabajo con VS2012 y me da error en Office no me sale que puede ser

    using Excel = Microsoft.Office.Interop.Excel;

    1. Probablemente te haga falta incluir la librería (en forma de dll, Microsoft.Office.Interop.Excel.dll) en tu proyecto. Disculpa la tardanza.

  3. Gracias auraham por tu código.. te cuento una anécdota: inicialmente pensé que eras de la India… y luego oh sorpresa. Habla español!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s