2009-05-26 13 views
12

¿Cómo leería desde una hoja de Excel y cargaría la selección marcada (Área) en una matriz multidimensional? Una columna en Excel podría ser una matriz multidimensional, ya que contendría más de un solo valor.Lectura desde Excel (Rango en matriz multidimensional) C#

La idea (no estoy seguro de qué tan bueno o malo es esto) es ahora hacer un bucle for en todo el Excel.Area (campos seleccionados) y agregar el contenido de ese campo a la matriz multidimensional. Como la matriz multidimensional es del tipo object [,] y, por lo tanto, no es genérica, no hay un método add() conveniente para ella. Todo debe hacerse manualmente.

¿Alguna idea de si este enfoque es correcto o si podría hacerse de manera más eficiente?

Respuesta

18

se puede leer el valor de rango como matriz:

using (MSExcel.Application app = MSExcel.Application.CreateApplication()) 
{ 
    MSExcel.Workbook book1 = app.Workbooks.Open(this.txtOpen_FilePath.Text); 
    MSExcel.Worksheet sheet = (MSExcel.Worksheet)book1.Worksheets[1]; 
    MSExcel.Range range = sheet.GetRange("A1", "F13"); 

    object value = range.Value; //the value is boxed two-dimensional array 
} 

Este fragmento de código es de .NET wrapper for MS Office. Pero el mismo principio está en VSTO o VBA en MS Excel.

2

Este es el código C# para hacer esto con SpreadsheetGear:

// Load the workbook. 
    SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook(@"MyWorkbook.xlsx"); 
    // Get a range of cells as an array of object[,]. 
    object[,] values = (object[,])workbook.Worksheets["MySheet"].Cells["A1:J10"].Value; 

SpreadsheetGear también proporciona API rápidas para acceder a las células una a la vez para que pueda evitar copiar los valores a una matriz sin sacrificar el rendimiento.

responsabilidad: Soy dueño de SpreadsheetGear LLC

+0

¿Por qué es mejor utilizar SpreadsheetGear frente a la interoperabilidad de Excel? – gyurisc

+0

Eso depende del tipo de aplicación que esté creando y de lo que esté haciendo con ella. En lugar de enumerarlos aquí, eche un vistazo a los comentarios de nuestros clientes en el lado derecho de esta página: http://www.spreadsheetgear.com/products/spreadsheetgear.net.aspx –

+0

"También proporciona API rápidas" ... ¿Es esa la API de SpreadsheetGear.Advanced.Cells o simplemente el hecho de que estamos arrojando el valor aquí a un objeto [,]? ¿Asumo que puedes lanzar directamente al doble [,] también? – Terry

Cuestiones relacionadas