tus camisetas frikis en camisetafriki.com
Home > Programacion > Insertar imagenes en Excel desde C#

Insertar imagenes en Excel desde C#

October 13th, 2008 Leave a comment Go to comments

Siguiendo con los post sobre cachitos de código que te hacen las vida más fácil (y que por lo visto hacen que aumenten las visitas del blog) hoy voy a hablar sobre como insertar una imagen en una hoja de Excel desde C# .NET

Todos estos fragmentos de código que voy subiendo solucionan problemillas concretos con los que me topo en los proyectos en los que trabajo y sobre los cuales tampoco encuentro información relevante en Google.

Empecemos, escribo el código y lo comento:

1
2
3
4
5
6
7
8
9
10
11
12
object oMissing = System.Reflection.Missing.Value;
Application apl = new Excel.ApplicationClass();
Workbook libro = apl.Workbooks.Open(@"c:\temp\archivoexcel.xls", oMissing, oMissing, oMissing, oMissing,
                  oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
 
#region Insertar imagen en excel
Excel.Worksheet sheet = (Excel.Worksheet)libro.Sheets[1];
System.Drawing.Image logo1 = System.Drawing.Image.FromFile(@"c:\temp\logoAena.png");
sheet.Shapes.AddPicture(@"c:\temp\logoAena.png", MsoTriState.msoFalse, MsoTriState.msoCTrue, 1f, 1f, logo1.Width, logo1.Height);
#endregion
 
libro.SaveAs(@"c:\temp\excel.xls", Excel.XlFileFormat.xlExcel9795, null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlLocalSessionChanges, false, null, null, 0);

Vamos a ver línea por línea que hace cada cosa

2
3
4
Application apl = new Excel.ApplicationClass();
Workbook libro = apl.Workbooks.Open(@"c:\temp\archivoexcel.xls", oMissing, oMissing, oMissing, oMissing,
                  oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);

Con estas lineas abrimos un archivo de Excel desde código, notaremos como se abre un proceso Excel.exe en el Administrador de Tareas, es necesario tener Excel Instalado e incluir la referencia al objeto COM: Excel Objects 11.0

7
8
9
Excel.Worksheet sheet = (Excel.Worksheet)libro.Sheets[1];
System.Drawing.Image logo1 = System.Drawing.Image.FromFile(@"c:\temp\ArchivoImagen.png");
sheet.Shapes.AddPicture(@"c:\temp\logoAena.png", MsoTriState.msoFalse, MsoTriState.msoCTrue, 1f, 1f, logo1.Width, logo1.Height);

Con esas líneas seleccionamos la primera hoja del libro que hemos abierto, luego cargamos una imagen en un objeto Image y con sheet.Shapes.AddPicture añadimos la imagen en las coordenadas 1,1 (ojo, no son celdas, son coordenadas en pixeles (y de tipo float)

12
libro.SaveAs(@"c:\temp\excel.xls", Excel.XlFileFormat.xlExcel9795, null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlLocalSessionChanges, false, null, null, 0);

Con esa línea salvamos el archivo con el nombre que queramos y ya está, ya tenemos un excel con una imagen. No hace falta que el Excel esté vacío, podemos abrir un excel con contenido y poner la imagen donde queramos.

¿Te ha servido? Apoya este blog:

Categories: Programacion Tags:
  • santiago ivan

    esta muy completo el codigo solo que no se como hacerlo fucionar el problema es que me hace falta usar un name space pero no se cual usar podrias decir en tu blog como ¿?

  • santiago ivan

    esta muy bien el codigo solo que a la hora de pegarlo en mi solucion me manda errores de name space para las partes donde escribiste excel, workbooks y me gustaria sabeer cual name space debo utiliar para que funcione o que me falta

  • http://twitter.com/ferdy182 Fernando F. Gallego

    Hola, gracias por tu comentario.
    Hace mucho que escribí esto y ahora mismo no puedo ayudarte porque no me acuerdo pero de todos modos si buscas en MSDN por las clases que te dan error te indicará a que Namespace pertenecen.

    Un saludo!

  • http://twitter.com/ferdy182 Fernando F. Gallego

    Prueba con Microsoft.Office.Interop.Excel
    es probable que tengas que importar la siguiente libreria Microsoft.Office.Interop.Excel (microsoft.office.interop.excel.dll)

    Un saludo

  • http://twitter.com/ferdy182 Fernando F. Gallego

    Hola, gracias por tu comentario.
    Hace mucho que escribí esto y ahora mismo no puedo ayudarte porque no me acuerdo pero de todos modos si buscas en MSDN por las clases que te dan error te indicará a que Namespace pertenecen.

    Un saludo!

  • http://twitter.com/ferdy182 Fernando F. Gallego

    Prueba con Microsoft.Office.Interop.Excel
    es probable que tengas que importar la siguiente libreria Microsoft.Office.Interop.Excel (microsoft.office.interop.excel.dll)

    Un saludo

  • Drsolarte4

    Hola me gustaria q escribieras de como hacer preprocesado de iamgenes en c#, entendiendose por preprocesado: filtrado de imagenes para eliminacion de ruido, filtros detectores de bordes y filtrado morfologico. esto lo pido ya q estoy haciendo reconocimiento de caracteres manuscritos con redes nueronales. mmmmmm si esto lo tienes ya hecho t agradeseria q me lo enviaras por correo. drsolarte4@hotmail.com

  • Anonymous

    Te recomiendo que te empolles esta librería http://www.emgu.com/wiki/index.php/Main_Page porque lo que pides es digno de una tesis doctoral por lo menos… Saludos

  • Ivan Rodriguez

    Una pregunta estoy utilizando este codigo pero me da un problema cuando ejecuto la pagina desde visual studio 2008 lo hace pero cuando ya lo instalo en el iis no, solo se queda se queda como ejecutando pero no hace nada  la pagina se queda estatica y verifico el task maneger y esta un proceso Excel.exe y ahi se queda me podrian ayudar porfavor