Principales respuestas
ayuda con excel a escoger una hoja

Pregunta
-
buenas queria saber si estaba bien planteado este if lo que necesito es coger una hoja de un excel que me pasan ese excel tiene 3 hojas cada hoja tiene datos distintos como hago para solo ejecutar en una hoja o ejecutar en varias lo que habia pensado era hacer un boton de check donde si esta activado lo hará en todas las hojas pero como hago para escogerlas aparte también quisiera que me ayuden como copio el valor de una celda y lo paso a otra hoja despues elimino ese valor de la hoja del principio
if(!libro.SelectWorksheet(nombre de hoja)) { }
se agradecería mucho la ayuda
- Editado carlos carpio2 jueves, 21 de enero de 2016 12:34
Respuestas
-
Eso es, recuerda que tambien tienes una sobrecarga con indices numericos fila,columna.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog- Marcado como respuesta carlos carpio2 lunes, 25 de enero de 2016 8:10
- Desmarcado como respuesta carlos carpio2 lunes, 25 de enero de 2016 9:55
- Marcado como respuesta carlos carpio2 lunes, 25 de enero de 2016 9:55
-
Copiaria las celdas a1, b1,c1,d1,e1 y f1 de la hoja2 en la hoja que tengas activa.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog- Editado Rodripelto lunes, 25 de enero de 2016 10:38
- Marcado como respuesta carlos carpio2 lunes, 25 de enero de 2016 12:07
-
El error significa que no tienes instanciado el objeto o es nulo, lo que no tengo claro es si procede de la linea
SLDocument libro = new SLDocument(nombrealta);
que no carga el documento o de la linea donde declaras las variables
string estado = null,value=null,falta=null, numero=null ,lol=null;
prueba
string estado = "",value="",falta="", numero="" ,lol="";
si persiste el error comprueba si carga el documento o que la celda en cuestion no tenga un dato null
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog- Marcado como respuesta carlos carpio2 lunes, 25 de enero de 2016 14:37
Todas las respuestas
-
Hola,
Lo primero es que especificaras que libreria estas usando para manejar excel, entiendo que es SpreadsheetLight.
Si lo que pretendes es que se ejecute el codigo dentro del if si a cambiado de hoja lo tienes mal, ya que le has puesto un negado delante por lo que ejecutara el if si NO a sido capaz de cambiar de hoja.
Para copiar una celda podrias hacerlo de diferntes formas pero la mas facil es usar el metodo CopyCell que tiene la libreria.
libro.CopyCell()
Este metodo tiene distintas sobrecargas, con las cuales puedes poner que celda tiene que copiar y a que celda tiene que copiarlo, tambien tiene una sobrecarga para cortar y pegar que por lo que comentas seria la que tienes que usarlibro.CopyCell("A1", "A11",true);// Cortar la celda A1 y pegarla en A11
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog
- Editado Rodripelto jueves, 21 de enero de 2016 13:54
-
gracias por la ayuda pero no se podria copiar toda la linea de golpe ya que siempre cambia el tamaño de la fila
ah y lo del if es para comprobar que la hoja existe mejor dicho que selecione esa hoja y el resto que no las toque claro cuando vaya copiar todo eso lo pase a otra hoja
entonces digo al momento de copiar tendria que poner algo asi no eso copiaria a la otra hoja o me equivoco
libro.CopyCellFromWorksheet("hoja2,""E1", "F8", "D11", SLPasteTypeValues.Values)
libro.CopyCell("E1", "F8", "D11", SLPasteTypeValues.Values);
-
-
Lo del if ya te comento que lo tienes negado !, por lo tanto el codigo de dentro se ejecutara cuando NO se capaz de cambiar de hoja.
libro.CopyCellFromWorksheet("hoja2,""E1", "F8", "D11", SLPasteTypeValues.Values)
Esto cortara el rango E1:F8 de la hoja2 y copiar en la hoja que tengas seleccionada a partir de la celda D11.
y libro.CopyRow es para copiar una fila entera, si es lo que necesitas claro que lo puedes usar, lo de que cambia el tamoño de la fila, no sobria decirte, nunca me ha pasado, puede ser por el tamaño de la fuente de letra. Podrias intentar copiar tambien el formato SLPasteTypeValues es un enumerador y tiene distintas opciones, como copiar valores, formato.... Lo siente pero no me acuerdo de todas, puedes probar.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog -
vale lo que pasa q lo que quiero es copiar toda una linea de la hoja 1 a la hoja2 entonces tengo 2 opciones q lo meta los rangos los usuarios o que lo coga completamente el programa
el libro.copyrow vale pero nose si lo pasara a la otra hoja
el codigo de aqui abajo sirve si lo pasa el usuario es por eso
libro.CopyCellFromWorksheet("hoja2,""E1", "F8", "D11", SLPasteTypeValues.Values)
no creo que funciones esto
libro.CopyRow(i,libro.SelectWorksheet("hoja2"));
-
Uffff, ahora mismo no se decirte si CopyRow tiene una sobrecarga para especificar la hoja, lo que si puedo decirte que la segunda linea de codigo que has puesto no funciona, ya que CopyRow esta esperando una celda y libro.SelectWorksheet("hoja2") es boleano con lo que devuelve true o false.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog -
-
Eso es, recuerda que tambien tienes una sobrecarga con indices numericos fila,columna.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog- Marcado como respuesta carlos carpio2 lunes, 25 de enero de 2016 8:10
- Desmarcado como respuesta carlos carpio2 lunes, 25 de enero de 2016 9:55
- Marcado como respuesta carlos carpio2 lunes, 25 de enero de 2016 9:55
-
-
-
Copiaria las celdas a1, b1,c1,d1,e1 y f1 de la hoja2 en la hoja que tengas activa.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog- Editado Rodripelto lunes, 25 de enero de 2016 10:38
- Marcado como respuesta carlos carpio2 lunes, 25 de enero de 2016 12:07
-
buenas queria saber que significa este error An unhandled exception of type 'System.NullReferenceException' occurred in SpreadsheetLight.dll
Additional information: Referencia a objeto no establecida como instancia de un objeto.SLDocument libro = new SLDocument(nombrealta); int idpedido=0,cont=2; DateTime dt; string estado = null,value=null,falta=null, numero=null ,lol=null; for (int i = 2; i <= lineasexcel; i++) { value = libro.GetCellValueAsString(i, 1);-->ahi falla using (SqlConnection conn = new SqlConnection(CONN)) { conn.Open(); string query = @"select idpedido , falta from tbpedido where referencia=@value and falta in ( select top (1) max(p.falta) from tbpedido p, tblinea_pedido lp where p.referencia=@value and lp.idpedido=p.idpedido group by p.falta order by p.falta DESC)"; SqlCommand sqlcmd = new SqlCommand(query, conn); sqlcmd.Parameters.Clear(); sqlcmd.Parameters.AddWithValue("@value", value); var dr = sqlcmd.ExecuteReader(); if (dr.Read()) { idpedido = int.Parse(dr["idpedido"].ToString()); dt = (DateTime)dr["falta"]; falta = Convert.ToString(dt); } string ipd = Convert.ToString(idpedido); libro.AddWorksheet("estado"); estado = controlestado1(ipd); if (estado != null) { libro.SelectWorksheet("estado"); numero = Convert.ToString(i); lol = Convert.ToString(cont); string rad=Path.Combine(rango1, numero); string rad2 = Path.Combine(rango2, numero); string comz = Path.Combine("C",lol); string comz2 = Path.Combine("A", lol); string comz3 = Path.Combine("B", lol); libro.SetCellValue(comz2, estado); libro.SetCellValue(comz3, falta); libro.CopyCellFromWorksheet(nombrehoja, rad,rad2, comz, SLPasteTypeValues.Values); cont++; libro.SelectWorksheet(nombrehoja); } else { estado = controlestado2(ipd); if (estado != null) { libro.SelectWorksheet("estado"); numero = Convert.ToString(i); lol = Convert.ToString(cont); string rad = Path.Combine(rango1, numero); string rad2 = Path.Combine(rango2, numero); string comz = Path.Combine("C", lol); string comz2 = Path.Combine("A", lol); string comz3 = Path.Combine("B", lol); libro.SetCellValue(comz2, estado); libro.SetCellValue(comz3, falta); libro.CopyCellFromWorksheet(nombrehoja, rad, rad2, comz, SLPasteTypeValues.Values); cont++; libro.SelectWorksheet(nombrehoja); } else { libro.SelectWorksheet("estado"); numero = Convert.ToString(i); lol = Convert.ToString(cont); string rad = Path.Combine(rango1, numero); string rad2 = Path.Combine(rango2, numero); string comz = Path.Combine("C", lol); string comz2 = Path.Combine("A", lol); string comz3 = Path.Combine("B", lol); libro.SetCellValue(comz2, estado); libro.SetCellValue(comz3, falta); libro.CopyCellFromWorksheet(nombrehoja, rad, rad2, comz, SLPasteTypeValues.Values); cont++; libro.SelectWorksheet(nombrehoja); } } dr.Close(); conn.Close(); } libro.Save(); } }
-
El error significa que no tienes instanciado el objeto o es nulo, lo que no tengo claro es si procede de la linea
SLDocument libro = new SLDocument(nombrealta);
que no carga el documento o de la linea donde declaras las variables
string estado = null,value=null,falta=null, numero=null ,lol=null;
prueba
string estado = "",value="",falta="", numero="" ,lol="";
si persiste el error comprueba si carga el documento o que la celda en cuestion no tenga un dato null
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog- Marcado como respuesta carlos carpio2 lunes, 25 de enero de 2016 14:37
-
-
-
DeleteRow borra la fila completa y seria
libro.DeleteRow(Fila donde empieza a Borrar,Nº filas a borrar);
Ejemplo
libro.DeleteRow(3,5); Borra 5 filas a partir de la fila 3.
pero si has usado
libro.CopyCellFromWorksheet(nombrehoja, rad, rad2, comz, SLPasteTypeValues.Values);
se pupone que las celdas de origen estan vacias ya que has realizado un cortar y pegar.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog -
pues no lo hace y nose que hacer tendria que dejarlo en blanco eh ahi mi codigo
libro.SelectWorksheet("estado"); numero = Convert.ToString(i); lol = Convert.ToString(cont); string rad = rango1 + numero; string rad2 = rango2 + numero; string comz = "C" + lol; string comz2 = "A" + lol; string comz3 = "B" + lol; libro.SetCellValue(comz2, estado1); libro.SetCellValue(comz3, falta); libro.CopyCellFromWorksheet(nombrehoja, rad, rad2, comz, SLPasteTypeValues.Values); cont++; libro.SelectWorksheet(nombrehoja); ipd = null; idpedido = 0; referencia = null;
-
Pues no se que decirte, el código parece estar bien.
¿Cuando terminas salvas los cambios?.
¿Esas celdas no estaran protegidas de alguna manera?.
¿No volveras a escribir en ellas?.
Podrias probar a escribir cadenas vacias en las celdas afectadas.
Tambien podrias probar con distintos valores de SLPasteTypeValues.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog -
-
-
Para insertar espacios vacios con
libro.SetCellValue(celda, "");
Y para ver si la hoja o libro esta protegido, si dispones de un excel en la pestaña revisar aparecera la opción de desproteger, si no esta protegido solo aparece la opción de proteger.
Esto es lo que dice la ayuda de excel 2007
Para desbloquear celdas o rangos de forma que otros usuarios puedan modificarlos, haga lo siguiente:
- Seleccione cada celda o rango que desea desbloquear.
- En la ficha Inicio, en el grupo Celdas, haga clic en Formato y luego en Formato de celdas.
- En la ficha Protección, desactive la casilla de verificación Bloqueada y, a continuación, haga clic en Aceptar.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog -
-
Pues lo siento, no se me ocurre nada mas, ¿y deleterow tampoco te funciona?.
De todas formas esta tarde, si puedo, probare esas funciones de la libreria. Ahora no la tengo instalada.
Es de buena educación dar las gracias cuando te ayudan, si alguna respuesta te ha sido de utilidad agradécelo marcandola como útil.
Blog -