Rellenar un Excel desde C#

Patxi Echarte, September 27th, 2005

No hay nada peor para un informático que hacer tareas repetitivas, lo que Neil Stephenson en su libro Criptonomicon llama hacer matrículas. Esta semana me ha tocado un “pequeño” marrón, consistente en ejecutar un procedimiento almacenado de SQL Server formado por varias consultas y rellenar con los resultados un excel, y todo ello repetirlo 120 veces, es decir, un auténtico marrón.

Como eso de repetir las cosas va en contra de mi religión, consideré que lo que correspondía era intentar hacer un programa que lo hiciera por mí, con lo cual me ahorraría unas cuantas horas y las que dedicase, al menos serían entretenidas. El programa debía constar de dos partes, una encargada de realizar las consultas y otra encargada de rellenar una hoja de excel con los resultados obtenidos. La primera parte no tiene ningún misterio, sin embargo la segunda puede parecer algo más complicada, aunque como veremos, nada más lejos de la realidad.

Hay dos formas principales de modificar el contenido de un archivo excel desde .NET, la primera y más potente se basa en la utilización de mecanismos de automatización, mediante el uso de los objetos COM de Office XP. Una segunda opción se basa en la utilización de ADO.NET para obtener o modificar las celdas del excel. Pese a que la primera opción es muy potente y nos permite controlar al 100% un archivo excel, también es algo más compleja, por lo que debido a que con las funcionalidades ofrecidas por la solución basada en ADO.NET era suficiente, me decidí por esta segunda opción.

Trabajar con esta opción basada en ADO.NET, es muy parecido a como trabajaríamos con cualquier otra base de datos, basta con abrir una conexión con el servidor utilizando el driver adecuado y ejecutar a continuación sentencias SQL ligeramente adaptadas.

Lo primero que necesitamos es referenciar los assemblies necesarios:

using System.Data;
using System.Data.OleDb;

Para este ejemplo vamos a utilizar un archivo de excel sencillo, en el que hay que rellenar varias celdas con valores calculados previamente, en concreto hay que rellenar las celdas B2 a la B5, con números que indican el número de estaciones disponibles de cada tipo, por ejemplo.

Para rellenar estas celdas lo que vamos a hacer es abrir una conexión utilizando el driver OLE e indicando el archivo excel a rellenar, lo cual se indica en el código de a continuación dentro de la variable strConnectionOle, que contiene la cadena de conexión que se pasará al constructor de la clase OleDbConnection para obtener la conexión necesaria para acceder al contenido del excel.

   
int[] data = new int[]{12,123,3,7};
   
string strConnnectionOle =  @"Provider=Microsoft.Jet.OLEDB.4.0;" +
@"Data Source=ejemplo-excel.xls;" +
@"Extended Properties="+'"'+"Excel 8.0;HDR=NO"+'"';
OleDbConnection oleConn = new OleDbConnection(strConnnectionOle);
oleConn.Open();
   
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = oleConn;
   
cmd.CommandText = "UPDATE [Hoja1$B2:B2] SET F1="+data[0];
cmd.ExecuteNonQuery();
   
cmd.CommandText = "UPDATE [Hoja1$B3:B3] SET F1="+data[1];
cmd.ExecuteNonQuery();
   
cmd.CommandText = "UPDATE [Hoja1$B4:B4] SET F1="+data[2];
cmd.ExecuteNonQuery();
   
cmd.CommandText = "UPDATE [Hoja1$B5:B5] SET F1="+data[3];
cmd.ExecuteNonQuery();
   
oleConn.Close();

Una vez establecida la conexión podemos realizar diferentes acciones como inserciones, borrados o actualizaciones, sobre cualquiera de las hojas existentes en el excel. En nuestro ejemplo nos vamos a limitar a rellenar las celdas indicadas, B2:B5, para lo cual creamos un objeto de la clase OleDbCommand, con el que realizaremos la ejecución de las sentencias SQL. Los datos con los que vamos a rellenar las celdas los tenemos disponibles en la matriz data con datos prefijados, que en una aplicación real habríamos calculado mediante consultas SQL o algún otro mecanismo.

Para rellenar las celdas utilizamos sentencias SQL independientes, una para cada celda, ya que están ubicadas en diferentes filas. Cada fila del excel, o del rango que seleccionemos de él, es contemplada como un registro, por lo que tenemos que actuar como si de una tabla normal de SQL se tratara. Para ello podemos seleccionar un rango consistente en varias filas y utilizar un where para modificar algunas de ellas, o podemos modificar todos los “registros” de un rango formado por un único registro y hacerlo varias veces. Dado que los rangos que seleccionemos pueden no tener nombre de columna, la forma de acceder a ellos es mediante F1, F2, F3, nombres de columnas que se generan automáticamente si en la cadena de conexión hemos utilizado HDR=NO. En el caso que hayamos conectado usando HDR=YES, la primera fila de cada rango elegido se tomaría como nombres de columnas, lo cual en nuestro caso no es necesario. En algunos casos pueden producirse errores al ejecutar la aplicación si las celdas sobre las que se escribe no tienen asignado un formato específico, así por ejemplo, si deseamos escribir números como es el caso, las celdas deberían estar preparadas con formato número para que no dé fallos.

Con todo esto, la consulta SQL utilizada realiza una actualizaciones sobre los rangos B2:B2 al B5:B5, lo cual indica que se desea modificar las celdas B2, B3, B4 y B5 de la hoja con nombre Hoja1. En la parte de los SQL correspondientes al SET, se dispone de una variable auxiliar para cada elemento del rango a modificar, en nuestro caso F1, a la que asignamos el valor correspondiente de la matriz de datos.

Una vez asignado el SQL al comando únicamente queda ejecutarlo con ExecuteNonQuery y cerrar la conexión tras haber ejecutado todas las consultas.

Actualización: he subido un archivo comprimido con un proyecto de ejemplo hecho con SharpDevelop. Para hacerlo funcionar basta con compilar los fuentes y copiar el archivo xls a la misma carpeta donde se cree el ejecutable. Si utilizas Visual Studio deberás crearte un nuevo proyecto a partir de los fuentes.

Más información

Comparte esta información

79 Comentarios para “Rellenar un Excel desde C#”

  1. diego sevilla dice:

    Muy bien! Esto es lo que diferencia a los buenos de los malos programadores. Al menos en Windows, donde este tipo de cosas no son tan sencillas como en UNIX. No sé si te lo creerás (creo que sí), pero me imagino a muchos compañeros reputados informáticos que se hubieran desinflado ante un “marrón” así :)

    Saludos!
    diego.

  2. guemos dice:

    Hola:

    Estoy usando tu codigo pero me marca el siguiente error….

    Index #0
    Message: The Microsoft Jet database engine could not find the object ‘Hoja1$B2:B2′. Make sure the object exists and that you spell its name and the path name correctly.
    NativeError: -543884569
    Source: Microsoft JET Database Engine
    SQLState: 3011

    no encuentra la hoja ni las celdas que puedo hacer?

    Saludos
    guemos

  3. Patxi dice:

    Asegúrate de haber copiado el archivo de excel en la misma carpeta donde esté el ejecutable, o modifica el string de conexión en la parte “Data Source=ejemplo-excel.xls;” para que apunte a la ubicación correcta.

  4. RaZieR ~ SarE dice:

    me sale este error
    “An unhandled exception of type ‘System.Data.OleDb.OleDbException’ occurred in system.data.dll”

    no se xq!!!
    copie el codigo tal como estaba.
    1.- el “using System.Data;” y “using System.Data.OleDb;” los puse donde se pone todos los USING.

    2.- el codigo de rellenar celdas las agrege a un boton en la accion clic!. esa es la parte que no entiendo no se donde ponerlo!!

    si me pudieras mandar toda la aplicacion en un .ZIP o .RAR te lo agradeceria mucho!!!
    mi correo es razier_18@hotmail.com
    solo quiero poner unos datos en excel y hacer operaciones y que lo que me de presentarlo en un TextBox. ayudenme porfa!!!

  5. luz dice:

    no encontre lo que necesitaba no entren a esta pagina

  6. Patxi dice:

    pues siento mucho que no encontrases lo que buscabas, Luz… pero no te preocupes, la próxima vez que vaya a publicar algo contactaré contigo para ver si es de tu interés, no vaya a ser que no entre nadie en mi página!!!!

  7. Patxi dice:

    He subido un archivo comprimido con el proyecto explicado para que se pueda ver en funcionamiento fácilmente. El proyecto está hecho con SharpDevelop, así que si usas Visual Studio tendrás que crearte un nuevo proyecto adjuntando los fuentes

  8. cerroke dice:

    hola

    estoyy realizando una aplicacione y necesito saber como puedo ocultar el menu del formulario principal (MDI)mietras se accede a otro formulario dentro de la misma aplicacion y que muestre el menu del formulario que se abrió. en vb.net 2003

    Me pueden decir komo maneko las hojas de excel dentro de vb.net 2003

  9. Benaor dice:

    Perdón por las molestias.
    Estoy probando tu programa y me da un error parecido al del compañero me dice lo siguiente:
    El motor de base de datos Microsoft Jet no pudo encontrar el objeto ‘Hoja1$B2:B2′. Asegúrese el objeto esiste, y que ha escrito el nombre y la ruta de acceso al objeto correctamente.
    Dentro de este mensaje me dice lo siguiente:
    ************** Depuración Just-In-Time **************
    Para habilitar la depuración Just In Time (JIT), el archivo de configuración de esta
    aplicación o equipo (machine.config) debe tener el
    valor jitDebugging establecido en la sección system.windows.forms section.
    La aplicación también se debe compilar con la depuración
    habilitada

    Por ejemplo:

    Cuando esté habilitada la depuración JIT, cualquier excepción no controlada
    se enviará al depurador JIT registrado en el equipo
    en lugar de controlarlo mediante el cuadro de diálogo.
    Espero que me eches una mano a arreglar esto.

  10. Patxi dice:

    ¿Has probado a descargar el archivo comprimido
    que indico en la actualización? En él se puede ver un ejemplo que funciona, o al menos en los equipos que he probado.

    Si estás haciendo algo a tu medida, comprueba que estés utilizando el HDR=NO o HDR=YES adecuado en la cadena de conexión, hay una explicación al respecto en el artículo. Revisa también que el formato de las celdas que quieres modificar sea el correcto, a veces también da problemas.

  11. Gaston dice:

    hola, lo que yo necesito es poder saber el nombre de la hoja(sheet) ya que un documento excel puede tener varias, como se hace para obtener los nombres de las hojas(sheet)?

  12. kar dice:

    por fa ayudame quiero hacer consultas a excel desde c# soy principiante lo necesito de urgen o por si tienes un trabajo o programa que conecte a una base de datos si es posible a una base de access un mdb por fa por fa alguien auxilieme

  13. Jonathan dice:

    Hola¡¡¡
    Ojala pudieras ayuidarme.
    necesito saber como abrir y guardar un documento de excel que lo creo en una aplicacion de VisualBasic.Net
    Ya tengo todo en mi formulario ya me habre pero no se como puedo realizar eso.

    Por fa’
    GRACIAS

  14. Vladimir dice:

    Alguien sabe como puedo abrir un excel desde vb.nt y capturar datos del documento???

    Gracias de antemano

  15. Patxi dice:

    Vladimir, puedes utilizar OleDb tal como se explica en el artículo y en las referencias, haciendo selects en vez de inserts o updates. Por otra parte tienes también la opción de utilizar directamente el control activex de excel, para lo que tendrías que hacer algo similar a lo que describo en el ártículo de cómo usar el control del internet explorer

  16. Óscar dice:

    Estas sentencias, ¿también me sirve para buscar primero una cadena y sustituir después, o es sólo para rellenar una casilla en concreto?

    Muchas gracias

  17. Mike dice:

    Hola!

    Si no quiero mandarle integers a excel?..si le quiero mandar por ejemplo strings??..marca error al hacer el ExecuteNonQuery(), como le hago??

  18. Patxi dice:

    El funcionamiento es idéntico, tendrías que tener las casillas del excel formateadas como cadena de texto y entrecomillar los strings en el sql para que la instrucción sea válida.

  19. FLiTTeR dice:

    Patxi, muchisimas gracias por la explicacion y el ejemplo, me ha tocado hacer un trabajito muy parecido y este ejemplo me viene al pelo. Gracias de nuevo (vaya, Luz, yo si que he encontrado lo que buscaba, que casualidad ¬¬)

  20. Jose Antonio dice:

    Buen ejemplo, estoy intentando hacer los mismo pero la hoja de calculo no existe, es decir hay crearla y rellenarla de datos, alguna sugerencia?

    Saludos.

  21. Benaor dice:

    Enhorabuena Patxi. En primer lugar, no se como pueden algunas personas poner pega a lo regalado. Hay veces que la luz no ilumina. Me gustaría comentarte un tema que ya ha salido por aqui pero que no consigo solucionar, es el siguiente: Quiero mandar cadenas de texto a las celdas pero no me deja, solo permite números. Si entrecomillo texto me dice: “No se han especificado valores para algunos de los parámetros requeridos”.
    De antemano te doy las gracias por tu ayuda.

  22. Benaor2002 dice:

    Siento haber sido tan ligero a la hora de solicitar la ayuda. Ya lo solucioné:
    cmd.CommandText = “UPDATE [Listado$B2:B2] SET F1=” & “‘AAA’”
    Simplemente el entrecomillado debe de ir con la comilla simple.
    De todas formas muchas gracias.

  23. Patanas dice:

    Hola, quiero saber si se puede obtener en una celda el nombre de la sheet….y como se hace….de antemano muchas gracias…

  24. Jesús V. dice:

    Si usan ASP .NET usen Server.MapPath para el error que le aparece a varios, pues esta funcion convierte rutas relativas a absolutas:

    string strConnnectionOle = @”Provider=Microsoft.Jet.OLEDB.4.0;” +@”Data Source=” + Server.MapPath(”Prueba.xls”) + “;” @”Extended Properties=” + ‘”‘ + “Excel 8.0;HDR=NO” + ‘”‘;

  25. Jordi dice:

    Hola Patxi, he probado tu codigo, i si lo aplico con el exel que tu dices funciona pero si creo yo un exel (tengo la version 2003 del microsoft exel) el programa se detiene en
    cmd.ExecuteNonQuery();

    He leido un poco hi encontre algo de las versiones pero no lo entendi muy bien, peude ser por eso que se detenga el programa.

  26. andres dice:

    Buenas, he realizado las pruebas de esto y no me ha funcionado, me muestra el siguiente error:

    “An unhandled exception of type ‘System.Data.OleDb.OleDbException’ occurred in system.data.dll”

    Si alguien conoce el origen de este error, por favor puede explicarmelo.
    Gracias de Antemano..

  27. Ricardo dice:

    Patxi, infinitas gracias. Llevo 2 días buscando formas de hacer esto y tenía la “mala” costumbre de usar COM con interoperabilidad. Sin embargo, con 8 líneas de código hago exactamente lo que necesito, gracias a este artículo.
    Jesús V: gracias por lo de server.MapPath; no había caído y me has iluminado.

  28. Felipe dice:

    Me da el siguiente error

    No se pudo encontrar el archivo ISAM instalable.

    Que sera?

  29. Daniel dice:

    hola, su codigo me funciona perfectamente, pero quisiera saber como hago para leer datos desde excel,

    muchas gracias por su atencion,

    Daniel Loaiza

  30. Patxi dice:

    Hola Daniel, revisa los comentarios, un saludo

  31. pamela dice:

    hice el ejemplo en asp.net funciona pero solo a veces que puedo hacer?? sera que quedan variables sucias?? si me pueden ayudar

  32. anonimo dice:

    Joer, casi te saldria mas acuenta escribirles un libro de C#, aqui hay gente que tiene dudas muy basicas, yo les recomendaria que se leyeran un libro le pegaran un ojo a la ayuda del c#.

    por cierto, muy bueno el articulo, seguro que a muchos les sera de utilidad :)

  33. Franciscano dice:

    mmmm…, por casualidad no sabras como ponerle color a las celdas a traves de adodb?, he estado buscando en google y en la api .net pero de momento no he encontrado nada

  34. Patxi dice:

    Hola Franciscano, no creo que puedas dar color a las celdas con adodb. Puedes probar a dar color de forma previa a las celdas del excel que vas a rellenar desde programa, o si esto no te vale, podrías probar a utilizar los objetos COM de excel.

  35. Arumando dice:

    Hola, alguien sabe como insertar renglones con este metodo a una hoja de excel por este metodo???????

  36. Milena dice:

    Holas a todos
    Estoy intentando hacer lo contrario, es decir leer los datos del excel y guardarlos en BD.

    Para la lectura de datos, estoy haciendo unas pruebas con el siguiente código, sin embargo no los está cargando.
    Me podrían ayudar por favor. Gracias
    ——

    DataTable worksheets;
    string strConnnectionOle = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” + this.txtRutaArchivo.Text + “;Extended Properties=Excel 8.0;”;

    OleDbConnection oleConn = new OleDbConnection(strConnnectionOle);

    oleConn.Open();
    worksheets = oleConn.GetSchema(”Tables”);
    this.dGridViewTabla.DataSource = worksheets;

  37. Patxi dice:

    Hola Milena, prueba a realizar un SELECT y asignar el DataSource resultante al grid.

  38. César dice:

    Hola a todos,

    He hecho mas o menos lo mismo que se indica para insertar datos en una excel desde c#, la diferencia es que utilizo un Insert en vez de un update. El problema es que cuando intenta insertar strings de más de 255 caracteres se produce el siguiente mensaje de error:
    “El campo es demasiado pequeño para aceptar la cantidad de datos que intenta agregar. Intente insertar o pegar menos datos”. No creo quen sea porque excel limite el contenido de las celdas, porque se pueden escribir más de 3000 caracteres en ellas. Alguna idea?? Se agradece de antemano cualquier ayuda.

    Un saludo

  39. Armando dice:

    Hola estoy trayendo los datos de una tabla en excel a un datagrid en c# y hay unos campos de tiempos en horas que necesito traer con el formato en el que me los muestra en el archivo excel y cuando los cargo en el datagrid me muestra es una fecha con horas…como puedo hacer?

    Gracias

  40. LucasHMB dice:

    Hola. ¿Tenés alguna info de como imprimir una hoja de excel desde un proyecto en C#? A la hoja la edito desde el proyecto sin problemas, pero no tengo idea como encarar la impresión del formulario en el formato en que está. Agradeceré tu ayuda

  41. rana dice:

    hola tienen alguna informacion de como mandar informacion de un formulario a otro en c#

  42. Billy dice:

    Que tal? Muy buen ejemplo. Ahora sabes como puedo hacerlo utilizando PHP.

    De antemano gracias….

  43. Oscar dice:

    Esta muy buena la ayuda pero estoy tratando de cargar un documento de excel pero este documento tiene libros, estos nombres cambian a cada rato, me gustaria poder saber la sentencia sql para saber los nombres de estos libros..

    gracias

  44. allan dice:

    Hola necesito saber como introducir y consultar datos de un archivo excel en una aplicación en c# para windows mobil

  45. Volpino dice:

    Gracias, me fue muy util tu ejemplo

  46. walter dice:

    Hola:

    En un Datagrid tengo una columna de strings correlativos (00001, 00002, 00003, etc). Pero cuando los exporto a excel me salen numericos (1,2,3,etc) lo cual no es corrcto… como puedo mantener el formato de los strings numericos???

    Gracias por la ayuda

  47. Patxi dice:

    Hola Walter, prueba a poner en la plantilla excel la columna con formato texto, y rellena el excel a continuación a partir de los datos del datagrid.

  48. nwrafa dice:

    Buenas…

    Quiero actualizar una celda de una hoja excel, he seguido todos vuestros comentarios y recomendaciones y al ejecutar el ExecuteNonQuery me devuelve el siguiente error:
    La operación debe usar una consulta actualizable.

    Este es el código:

    Dim cnExcel As New OleDbConnection()
    Dim cmdExcel As New OleDbCommand()

    Dim NOMBRE as string = “Manolito”

    cnExcel.ConnectionString = “Provider=Microsoft.Jet.OleDb.4.0;Data Source=” & RutaArchivoExcel & “;Extended Properties=”"Excel 8.0;HDR=No;IMEX=1;”"”

    cnExcel.Open()

    cmdExcel.Connection = cnExcel

    cmdExcel.CommandText = “UPDATE [Prueba$A1:A1] SET F1 = ‘” & NOMBRE & “‘”

    cmdExcel.ExecuteNonQuery()

    ¿Alguna sugerencia…?

    Gracias.

    Rafa

  49. Patxi dice:

    Hola nwrafa, comprueba que no tienes el excel protegido contra escritura, ni lo tienes abierto con otro proceso, o que las celdas que intentas modificar no estén protegidas.

    Quizás te sirva también mirar esta url:
    http://support.microsoft.com/?scid=kb%3Ben-us%3B316475&x=7&y=13

  50. trucutrucu dice:

    hola que tal, he leido el articulo y me parece muy interesante, yo tengo un problema similar, pero yo quiero hacer lo mismo que aqui se explica pero con php, me han dicho que lo haga con odbc, pero la verdad no tengo idea de como hacerlo. usted sabe como podria hacerlo desde php???
    gracias de antemao

  51. Moncho dice:

    como puedo leer datos de excel 2007?
    Uso microsoft.ACE … pero me da un error “no se encuestra el archivo ISAM instalable” o algo asi.
    Me puedes ayudar. Gracias!!!

  52. Alejandra dice:

    hola…

    por favor, su valiosa ayuda con el siguiente error:

    no se encuestra el archivo ISAM instalable

    el programa funciona perfectamente en windows xp, pero saca este error en w2000…. por favor, ayuda…. quedaré totalmente agradecida

  53. Patxi dice:

    Alejandra, prueba lo que se indica en esta página, puede deberse a que no tengas instalado el office o a que la instalación esté corrompida: http://support.microsoft.com/kb/209805/es

  54. Moniq dice:

    Hola… me ha sido muy util tu ejemplo…
    El problema es que necesito desde visual 2 cosas:
    1. crear hojas en excel con el nombre como fecha (es decir 25/11/07)
    2. Hacer lo mismo que colocas en tu ejemplo pero con un “autonumerico” es decir, que cada vez que cree un nuevo registro lo haga en el siguiente renglon…
    3. Calcular totales en la misma hoja de excel de determinado campo…
    Si pueden ayudarme con alguno de estos problemillas les estoy MUY agradecida

    Atte: Monica (mmonik15@gmail.com)

  55. Dairo dice:

    Hola Patxi muy bueno el articulo, muchas gracias por la aplicacion hace dias estaba buscando algo similar para hacer un control de asistencia para mi empresa y capturar cdigos de barras mostrando una interfaz desde un excel por comodidad, me vino como anillo al dedo….

  56. Dairo dice:

    Ahh Patxi deberias arreglar tu problema personal con Luz
    Es que soy cubano y no podia dejarlo pasar..

  57. Patxi dice:

    Hola Dairo ;) la verdad es que no tengo ningún problema con Luz, más bien parecía que lo tenía ella con el blog, pero de eso hace mucho tiempo, desde el 2005, seguro que ahora nos llevaríamos bien ;)

    Un saludo para ti, tu gente y tu pais, que sois de lo mejor!!!

  58. Dairo dice:

    Muchas gracias, seguro serian amigos.. jaja Un saludo para ti tambien y saludos para los tuyos , bueno aqui no dice tu nacionalidad pero asumo que seas español.

    Puede que mas alante requiera de tu ayuda.. gracias de antemano

    Salu2.

  59. Dairo dice:

    Patxi te tengo una interrogante:
    En el caso de que en el archivo excel existan columnas que se unen para formar una, en caso de por ejemplo b y c a cual de ellas se hace referencia?? a “b” o “c”

    Gracias de antemano..

  60. Dairo dice:

    Bueno la pregunta esta mal hecha, que tal si quiesiera modificar A3, A4, A5 y luego B2 y luego H5 por ejemplo????

    Thanks

  61. Dairo dice:

    Te hare una ultima pregunta (no tiene que ver con la aplicacion), necesito hacer una interfaz en c# que me reproduzca un documento word o excel para capturar los datos que se introducen mediante un scanner y volcarlos en una base de datos, a lo mejor sabes algo de eso o lo has visto en algun sitio….

    Gracias de nuevo

  62. Guillemro dice:

    hola Praxi estoy teniendo problemas al guardar datos en el excel, se me cuelga cuanod hace el cmd.ExecuteNonQuery(); Estoy usando Excel 2003 de Microsoft. Tenes idea que esta pasando y como puedo arreglarlo?

  63. john dice:

    hola tengo problemas con el ejemplo que lo subiste, el error que me aparece es que tengo dos main, y no se como solucionarlo sera posible que me puedas ayudar porfa.
    y al ELIMAR UN MAIN ME SALE EL SIGUIENTE ERROR
    Error1 Atributo ‘AssemblyVersion’ duplicado E:\Cliza\rellenar-excel\rellenar-excel\Properties\AssemblyInfo.cs 32 12 rellenar-excel

  64. Werol dice:

    Excelente articulo!!!! justo lo que necesitaba

  65. carlos dice:

    Hola Patxi que bueno articulo me gusto mucho tu trabajo, con ese mismo ejemplo fijate que codifique con access pero me sale error porfavor te pido que me ayudes por que ya no se que hacer mas.
    nota: el error que me sale es: no se puede modificar el diseño de la tabla.esta en una base de datos de solo lectura

    sub Page_Load(Src As Object, E As EventArgs)
    If Not IsPostBack Then
    Dim conexion As New OleDbConnection
    Dim ruta As String=”C:\inetpub\wwwroot\datosaspnet\clientes.mdb”
    Dim conectar As String=”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=”
    Dim sql As New OleDbCommand
    conexion.ConnectionString = conectar & ruta
    conexion.open
    sql.Connection = conexion
    sql.CommandText = “CREATE TABLE Prueba1 ” & _
    “(Id INTEGER IDENTITY PRIMARY KEY, Nombre VARCHAR(40), Teléfono CHAR(9));”
    sql.ExecuteNonQuery()
    conexion.close
    end if
    End sub

  66. Patxi dice:

    Hola carlos, según el error que te da, tiene pinta de que no puedes acceder al access desde el programa que estás haciendo, comprueba que el usuario que ejecuta el programa tenga permisos de escritura en la carpeta C:\inetpub\wwwroot\datosaspnet\ y en la base de datos, así como que no esté protegida.

  67. Nomad dice:

    Hola Patxi,

    Estoy trabajando con datasets y quiero generar un listado en excel …

    Me encuentro con que tu ejemplo me funciona perfectamente con números, pero no sirve para strings… :( lo he probado todo… (almenos lo que se dice y comenta en la página (o eso creo).

    me iría bien una manita… ¿alguna idea?

    Muchas Gracias!

  68. Patxi dice:

    Hola Nomad, debería funcionarte tanto para enteros como para strings, a mi al menos me funciona. Asegúrate lo único de que el tipo de la celda donde intentas insertar/actualizar o seleccionar valores, es del tipo que requieres.

    Consulta también la primera de las referencia que pongo al final del post.

  69. Noels dice:

    Hola a todos, por fa una ayuda con esto;
    Como hago una función que permita introducir un dato en (ej)la celda D2 para que presente el la celda E2 los datos que estan en B2 y para ello el dato de D2 es igual a B1.

    saludos

  70. cesar dice:

    hola, y en el caso que quiera hacer un UPDATE para una cadena?? como haria en C#??, porque estoy haciendo un programa que actualice un archivo en excel y me esta saliendo: Error de sintaxis en la instrucción UPDATE. En tu codigo si pongo: string[] data = new string[] {”luis”,”cesar”,”jorge”,”jose” }, sale error: No se han especificado valores para algunos de los parámetros requeridos;
    gracias

  71. Andres dice:

    “…
    luz dice:

    November 24th, 2005 a las 8:00 pm
    no encontre lo que necesitaba no entren a esta pagina
    …”

    Luz, como dice patxi, que lastima que no encontraste lo que buscabas, por lo que veo en los comentarios, hay gente que no tiene ni la menor idea de nada y solo quieren que les den el codigo … si no saben poner una referencia .. como saben que buscan ??

  72. Andres dice:

    Por cierto, esta muy bueno el articulo, me dio una idea mas para lo que quiero hacer, no se me habia ocurrido intentar por este lado.
    Saludos

    Andres
    Cordoba - Argentina

  73. ricardo dice:

    hola a todos con respecto al tema de que no funciona el update con string recominedo que al inicio y al final del texto pongan ‘ eso te permite cargar todo tipo de datos en ele excel

  74. Nelson dice:

    Todo Excelente pero requiero leer datos de excel 2007 que toca modificar

  75. VIGAHER dice:

    como puedo rellenar una hoja de excel desde c# y la conexion a oracle, aproximadamente son 24.000 registros, ya lo tengo pero quiero saber un método mas rápido ya que el que tengo es bastante lento y tarda un aproximado de 16 minutos.

  76. anonimo dice:

    hola!soy nuevo en esto ayudenme porfa que operaciones puedo hacer con un rango?

  77. Juanko dice:

    quiero saber como puedo agregar datos en celdas que ye tienen predefinidas formulas dentro de ellas, o sea la celda tiene una formula y quiero sobrescribir sobre ella, porfa ayuda en el colegio para el cual estoy q hago su sistema de notas me estan apurando que termine el programa

  78. ed dice:

    muy bueno che , Patxi, estaba pensando hasta que llegue aca.

    salu2

  79. JOE dice:

    Hola,

    A la hora de realizar un Update sobre el fichero Excel, en concreto cuando quiero insertar números, me aparece en la celda el número precedido de comilla simple, p.ej.: ‘9. ¿Alguien sabe como quitarlo?
    He intentado quitarlo con un replce y nada…
    Este es el código que tengo:
    //Establecemos la conexión
    string connstring = @”Provider=Microsoft.Jet.OLEDB.4.0;” + @”Data Source=” + machineUpload + rootUpload + “\\” + ruta_Informe + “\\” + informe + “;” + @”Extended Properties=” + ‘”‘ + “Excel 8.0;HDR=NO” + ‘”‘;
    connection.ConnectionString = connstring;
    connection.Open();

    insert = “INSERT INTO [Datos$C” + (3 + j) + “:C” + (3 + j) + “] VALUES(’” + ds.Tables[0].Rows[0][0].ToString().Replace(”‘”,”") + “‘)”;

    cmd.CommandText = insert;
    cmd.ExecuteNonQuery();

    Cualquier ayuda será bienvenida.

    salu2

Deja un comentario