Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cargar una matriz desde Excel a una variable de array of arrar of Double (https://www.clubdelphi.com/foros/showthread.php?t=68782)

TecnoBestia 06-07-2010 20:23:38

Cargar una matriz desde Excel a una variable de array of arrar of Double
 
Hola a todos.

Tengo un programa para el cual debo cargar datos desde una archivo de excel. Estos datos deben ser cargado en una matriz de una dimensión muy grande pero puede variar de corrida a corrida Por eje. (5000x10) o más o menos.

El programa es un algoritmo genético que recibe una población de individuos representados por las filas de la matriz (cada fila es un individuo) y los deberá clasificar, el como no importa. El problema es que no tengo la menor idea de como cargar la matriz inicial. Tengo los datos en una hoja de excel la cual logro abrirla desde delphi utilizando un objeto OLE, pero no sé como extraer los datos de éste. Puedo verlos pero no tocarlos o copiarlos en la matriz.

Me gustaría una forma de tomar el rango en excel, copiarlos y pegarlos de alguna forma en Delphi y que delphi los carge a la matriz, he utilizado un TStringGrid pero no he logrado copiar los tados en el con un simple paste.

Soy novato en delphi, es mi primer programa, tal vez alguien me pueda decir como hacer lo que quiero, algún componente o algo así.

Gracias por su preciado tiempo.

Neftali [Germán.Estévez] 07-07-2010 12:16:13

Hola.
Si los datos que tienes en Excel tienen "formato Tabla" y creo por lo que comentas que sí, lo más fácil es que accedas vía ADO.

Puedes crear una conexión con ADO y acceder a los datos de la hoja como si fuera una tabla; Con un simple recorrido accederás a las filas.

Es un tema que ya hemos tratado en los foros, y hay ejemplos de cómo hacerlo. Busca por "Excel ADO*" (sin las comillas) y encotrarás bastantes hilos.
En el FTP también puedes encontrar ejemplos. En concreto los dos primeros van sobre este tema.

Caro 07-07-2010 16:07:23

Hola TecnoBestia, ademas de hacerlo con Ado como te dijo Neftali, también puedes hacerlo de esta forma:

Código Delphi [-]
const
  xlCellTypeLastCell = $0000000B;
var
 Excel, Sheet: OLEVariant;
 CantRow, CantCol, i, j : Integer;
 RangoMatriz: Variant;
begin
  FileName := 'C:\Archivo.xls';
  Excel := CreateOleObject('Excel.Application');
  Excel.Workbooks.Open(FileName);
 
  Sheet := Excel.Workbooks[ExtractFileName(FileName)].WorkSheets[1];
  Sheet.Activate;
  Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
 
  CantRow := Excel.ActiveCell.Row;
  CantCol := Excel.ActiveCell.Column;
 
  RangoMatriz := Excel.Range['A1', Excel.Cells.Item[CantRow,CantCol]].Value;
 
  StringGrid1.ColCount := CantCol+1;
  StringGrid1.RowCount := CantRow+1; 

  for i:=1 to CantRow do
   begin
    for j:=1 to CantCol do
      StringGrid1.Cells[j,i] := RangoMatriz[i,j]; 
   end;

Saluditos

TecnoBestia 07-07-2010 19:05:39

Agradecimientos.
 
Muchas gracias a los dos, sus aportes siempres son acertados.

Les agradezco mucho su ayuda y su valioso tiempo.


La franja horaria es GMT +2. Ahora son las 21:22:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi