none
Exportar a Excel , un Table RRS feed

  • Pregunta

  • Buenas noches Comunidad ..

    Veran Tengo una tabla que lleno con un for each ..y lleno datos...

    Bueno el objetivo es poder exportar esa tablita a excel , la verdad es como recien empiezo con MVC 4 ..

    No tengo ni idea como podria exportar esa tabla a excel ...si alguien me pudiera dar alguna ayuda , se lo agradeceria mucho...

    Gracias de antemano.

    miércoles, 17 de abril de 2013 18:06

Respuestas

  • Hola Santiago,

    Para exportar una tabla a Excel (técnicamente hablando, para que la acción del controlador retorne un FileContentResult con los datos en formato XLS) es necesario contar con MS Excel instalado en el servidor, ya que tu proyecto debería referenciar a la biblioteca nativa de MS Excel para poder manejar sus objetos propios y poder así generar el archivo XLS. Referenciando desde tu proyecto a MS Excel, podrás utilizar el código de la siguiente manera:

    using Excel = Microsoft.Office.Interop.Excel;
    
    public class ExcelWorkbook
    {
        public string FilePath { get; set; }
        public bool Visible { get; set; }
    
        private Excel.Application _msExcel;
        private Excel.Workbook _currentWorkbook;
    
        	public ExcelWorkbook(string filePath, bool isVisible)
            {
                if (String.IsNullOrEmpty(filePath))
                {
                    throw new ArgumentNullException("filePath");
                }
    			this.FilePath = filePath;
                try
                {
    				_misValue = Type.Missing;
    				_msExcel = new Excel.ApplicationClass();
    				_msExcel.UserControl = false;
    				_msExcel.DisplayAlerts = false;
    				
                    _msExcel.Visible = isVisible;
                    
                    _currentWorkbook = _msExcel.Workbooks.Open(filePath, _misValue, _misValue,
                        _misValue, _misValue, _misValue, _misValue, _misValue, _misValue, _misValue,
                        _misValue, _misValue, _misValue, _misValue, _misValue);
    
    		// Trabaja aquí con el Libro de Excel
    		} catch (Exception ex) { // Hacer algo si hay excepción }
      	}
    }

    Esta es una manera, pero no siempre se cuenta con MS Excel instalado en el servidor (a veces los clientes no quieren instalarlo por diversas razones).

    Una manera poco elegante que suelo utilizar (poco elegante pero eficaz) es escribir los valores separados por coma (formato CSV), y en el momento de retornar el texto, lo hago como un archivo con extensión XLS en lugar de CSV o TXT.  Es decir, en la acción hago algo como lo siguiente:

    public FileContentResult Export(ExportViewModel model)
    {
        var list = GetObjectList(model);
        return File(ConvertToTabularText(list), TAB_SEPARATED_VALUES_MIME_TYPE, "Nombre_archivo.xls");
    }

    O sea, obtengo la lista de objetos, lo convierto en una sucesión de strings (de eso se encarga la función ConvertToTabularText(), utilizando un StringBuilder y recorriendo la lista, armando cada línea con los valores separados por coma) y retorno un archivo con extensión XLS pero que dentro tiene texto plano. Cuando se abre el archivo, MS Excel muestra una advertencia acerca del contenido del archivo, pero si se da Aceptar podemos ver el archivo como si estuviera en formato XLS. Una pequeña trampa, pero que a veces los clientes aceptan con tal de no instalar MS Excel en el servidor.

    Espero que esta respuesta ayude. Saludos.


    Pablo M. Carballo MCTS



    • Marcado como respuesta Santiago Campusmana viernes, 19 de abril de 2013 16:16
    • Editado Pablo Carballo lunes, 22 de abril de 2013 21:44 Removido comentario del método
    jueves, 18 de abril de 2013 19:13