none
ayuda con excel a escoger una hoja RRS feed

  • 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  



    jueves, 21 de enero de 2016 12:19

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
    lunes, 25 de enero de 2016 8:08
  • 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
    lunes, 25 de enero de 2016 10:37
  • 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
    lunes, 25 de enero de 2016 13:53

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 usar
    libro.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
    jueves, 21 de enero de 2016 13:45
  • 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);

    jueves, 21 de enero de 2016 13:57
  • esto noseria mejor   libro.CopyRow?¿ 
    jueves, 21 de enero de 2016 13:58
  • 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

    jueves, 21 de enero de 2016 14:44
  • 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"));

    jueves, 21 de enero de 2016 15:24
  • 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

    jueves, 21 de enero de 2016 16:50
  • entonces no queda mas primero creo la hoja nueva  la selecciono y después copio 
    libro.CopyCellFromWorksheet("hoja2,""E1", "F8", "D11", SLPasteTypeValues.Values)
    lunes, 25 de enero de 2016 7:39
  • 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
    lunes, 25 de enero de 2016 8:08
  • muchas gracias por la ayuda
    lunes, 25 de enero de 2016 8:10
  • una pregunta 

    libro.CopyCellFromWorksheet("hoja2,""E1", "F8", "D11", SLPasteTypeValues.Values)

    cuando copia copia por decir de a 1 a f1 digamos toda la fila asi seria o me estoy equivocando 

    lunes, 25 de enero de 2016 9:58
  • 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
    lunes, 25 de enero de 2016 10:37
  • 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();
    
                }
    
    
            }

    lunes, 25 de enero de 2016 12:09
  • 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
    lunes, 25 de enero de 2016 13:53
  • si no cargaba por 2 fallos al momento de leer donde marque y cuando crea la nueva hoja ya que estaba creada antes daba error por ahi ya lo solucione  muchas gracias 
    lunes, 25 de enero de 2016 14:39
  • buenas  me podrías explicar un poco sobre es que no lo entiendo  el primer campo es donde comienza borrar en mi caso la linea que ah copiado quiero borrarla seria por decir   a1;a1 eso estaria bien asi solo borra esa fila 
                                libro.DeleteRow();

    lunes, 25 de enero de 2016 15:30
  • 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

    lunes, 25 de enero de 2016 15:54
  • 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;

    martes, 26 de enero de 2016 8:21
  • 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

    martes, 26 de enero de 2016 9:27
  • si  hago un libro.Save();

    como puedo ver si esta protegida ? 

    no vuelvo escribir en ellas

    martes, 26 de enero de 2016 9:59
  • y como puedo insertar en esa linea espacios vacíos 
    martes, 26 de enero de 2016 10:21
  • 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:

    1. Seleccione cada celda o rango que desea desbloquear.
    2. En la ficha Inicio, en el grupo Celdas, haga clic en Formato y luego en Formato de celdas.
    1. 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

    martes, 26 de enero de 2016 10:39
  • si estaba bloqueada pero sigue igual y la otra manera de poner espacios en blanco nose yo los excel nuca son del mismo tamaño de largo asi q nose si servira  (largo me refiero ah fila)
    martes, 26 de enero de 2016 11:12
  • 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

    martes, 26 de enero de 2016 11:32
  • muchas gracias por tu ayuda 
    martes, 26 de enero de 2016 11:52