none
No puedo acceder a una celda de un libro de Excel RRS feed

  • Pregunta

  • Trato de acceder a los datos de un libro de Excel 2010, desde vs2010. Este es el código:

        Microsoft.Office.Interop.Excel.Application oEx;
        Microsoft.Office.Interop.Excel._Workbook Wb;
        Microsoft.Office.Interop.Excel._Worksheet Sh;
        Microsoft.Office.Interop.Excel.Range Rg;
    
        private void btnImportar_Click(object sender, EventArgs e)
        {
          string ruta = "";
          if (dlg.ShowDialog() == DialogResult.OK)
          {
            ruta = dlg.FileName;
            AbrirLibro(ruta);
          }
        }
    
        private void AbrirLibro(String ruta)
        {
          String NomMat = MateriaActual.NombreMat.ToLower();
          int NroFila = -1;
    
          oEx = new Microsoft.Office.Interop.Excel.Application();
          oEx.Visible = true;
          Wb = oEx.Workbooks.Open(ruta);
          Sh = Wb.ActiveSheet;
    
          for (int i = 1; i < 10; i++)
          {
            for (int c = 2; c < 10; c++)
            {
              if (NomMat == Sh.Cells[i, c].Value2.ToString().ToLower())  <-- Aquí me da error
              {
                NroFila = i;
                break;
              }
            }
          }
          
          MessageBox.Show("Materia: " + NomMat +"\nFila: " + NroFila.ToString());
        }

    El título del error es: No se Controló RuntimeBinderException
    y el mensaje de error es: No se puede realizar enlace en tiempo de ejecución en una referencia NULL.

    Aclaro que agregué la referencia y el using a: Microsoft.Office.Interop.Excel

    Desde ya Muchas Gracias.

    Saludos


    sábado, 6 de marzo de 2021 6:50

Respuestas

  • Ya encontré el problema. Cuando la celda esta vacía "Sh.Cells[i,c].Value2" devuelve null. Solución, verificar eso dentro del bucle, así:

    for (int i = 1; i < 10; i++)
          {
            for (int c = 2; c < 10; c++)
            {
              if (Sh.Cells[i, c].Value2 == null) continue;
              if (NomMat == Sh.Cells[i, c].Value2.ToString().ToLower())
              {
                NroFila = i;
                break;
              }
            }
          }

    sábado, 6 de marzo de 2021 13:19

Todas las respuestas

  • Ya encontré el problema. Cuando la celda esta vacía "Sh.Cells[i,c].Value2" devuelve null. Solución, verificar eso dentro del bucle, así:

    for (int i = 1; i < 10; i++)
          {
            for (int c = 2; c < 10; c++)
            {
              if (Sh.Cells[i, c].Value2 == null) continue;
              if (NomMat == Sh.Cells[i, c].Value2.ToString().ToLower())
              {
                NroFila = i;
                break;
              }
            }
          }

    sábado, 6 de marzo de 2021 13:19
  • Hola,

    Gracias por confirmar que se ha encontrado una solución a la consulta realizada.

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 8 de marzo de 2021 14:59
    Moderador