Tengo archivo de excel con la hoja1 que tiene un valor tengo que leer en la fila 2 y la columna 10.
Aquí está mi código.

Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Excel.Sheets excelSheets = excelWorkbook.Worksheets;
string currentSheet = "Sheet1";
Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
var cell = (Excel.Range)excelWorksheet.Cells[10, 2];

Después de conseguir el objeto de celda que es Excel.Gama, no sé cómo leer el contenido de esa celda. He tratado de convertir en la matriz y en bucle encima de él y traté de convertir a la matriz de cadena, etc. Estoy seguro de que es muy simple. Es allí una manera directa para obtener un valor de la celda que es la cadena?

InformationsquelleAutor DoodleKana | 2013-09-24

6 Comentarios

  1. 74

    Usted necesita para lanzar una cadena (no un array de string), ya que es un valor único.

    var cellValue = (string)(excelWorksheet.Cells[10, 2] as Excel.Range).Value;
    • si puedo hacerlo de la manera que usted ha mencionado que tengo un error como este:No expresión de conversión de tipo ‘de Microsoft.De la oficina.De interoperabilidad.Excel.La gama’ de tipo string.
    • Traté de que el enfoque mencionado antes, pero yo estaba null siempre y en VS 2012 cuando lo hice .Valor de no venir. Valor2 o Valor de[objeto] fue subiendo. Así que pensé que lo que yo estaba usando de alguna manera estaba mal y decidió pedir aquí. Pero me enteré de mi fila y columna se mezclan a través de prueba y error. Es de Células[fila, columna] como matriz. Por alguna razón, en internet los diferentes puestos dicho de otra manera, de modo que me tiene confundido.
    • He using Excel = Microsoft.Office.Interop.Excel y cuando me pruebe esta solución me sale el error The type 'Range' exists in both 'Microsoft.Office.Interop.Excel, Version[...]' and 'myProject[...]'. Alguna idea sobre que?
    • He cambiado var cellValue = (string)(excelWorksheet.Cells[10, 2] as Excel.Range).Value; A: Excel.Range firstCell = excelWorkSheet.get_range("K2","K2"); var cellValue = firstCell.Value2; partiéndolo en dos líneas evitar el mismo error para mí.
    • excelWorksheet.Cells[1, 1] es de 1 indexado…no 0.
    • Gracias! Después de iniciar este proyecto en red 4.0 descubierto que el destino fue sólo hasta el net 3.5… Después de horas topé con esta solución. El uso de net 3.5 con interoperabilidad 12.0.0.0 en Visual Studio 2010

  2. 15
    using Microsoft.Office.Interop.Excel;
    
    string path = "C:\Projects\ExcelSingleValue\Test.xlsx ";
    
    Application excel = new Application();
    Workbook wb = excel.Workbooks.Open(path);
    Worksheet excelSheet = wb.ActiveSheet;
    
    //Read the first cell
    string test = excelSheet.Cells[1, 1].Value.ToString();
    
    wb.Close();

    Este ejemplo se utiliza el ‘Microsoft Excel 15.0 Biblioteca de Objeto’, sino que puede ser compatible con versiones anteriores de Interoperabilidad y de otras bibliotecas.

  3. 7
     //THIS IS WORKING CODE                        
     Microsoft.Office.Interop.Excel.Range Range_Number,r2;
     Range_Number = wsheet.UsedRange.Find("smth");
     string f_number="";
    
     r2 = wsheet.Cells;
    
     int n_c = Range_Number.Column;
     int n_r = Range_Number.Row;
     var number = ((Range)r2[n_r + 1, n_c]).Value;
    
     f_number = (string)number;
    • Puede agregar un poco más de explicación a su respuesta? Tratamos de evitar las respuestas que se acaba de código 🙂 Una explicación es la más probable para ayudar a los futuros lectores.
    • Microsoft.De la oficina.De interoperabilidad.Excel.Intervalo[i,j] devuelve el objeto(y r2[n_r + 1, n_c] hacer así), así que tenemos que echar a Rango para obtener acceso a una serie de propiedades. La aplicación no ahora, ¿qué es el «Valor» de tipo, así que el uso de la variante(var) para el manejo de este.Y nos vemos de nuevo el uso de yeso para obtener el valor de cadena.
    • Puede editar su respuesta a incluir esa información.
  4. 4

    Es mejor para su uso .Valor2() en lugar de .El valor de(). Esto es más rápido y da el valor exacto de la celda. Para cierto tipo de datos, el truncamiento puede ser observado cuando .El valor de() se utiliza.

  5. 2

    El problema con la lectura de una sola Celda de Excel en la .Net viene del hecho de que la celda vacía que se evalúa a un Null. Por lo tanto, uno no puede usar su .Value o .Value2 propiedades, debido a un error que se muestra.

    Para devolver una cadena vacía, cuando la célula es Null la Convert.ToString(Cell) puede ser utilizado de la siguiente manera:

    Excel.Workbook wkb = Open(excel, filePath);
    Excel.Worksheet wk = (Excel.Worksheet)excel.Worksheets.get_Item(1);
    
    for (int i = 1; i < 5; i++)
    {
        string a = Convert.ToString(wk.Cells[i, 1].Value2);
        Console.WriteLine(a);
    }
  6. 2

    Por favor, intente esto. Esto puede ayudar a usted.
    A mí me funciona.

    string sValue = (range.Cells[_row, _column] as Microsoft.Office.Interop.Excel.Range).Value2.ToString();
    //_row,_column your column & row number 
    //eg: string sValue = (sheet.Cells[i + 9, 12] as Microsoft.Office.Interop.Excel.Range).Value2.ToString();
    //sValue has your value

Dejar respuesta

Please enter your comment!
Please enter your name here