Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Problema leyendo planilla excel (https://www.clubdelphi.com/foros/showthread.php?t=86687)

lbidi 16-09-2014 21:20:45

Problema leyendo planilla excel
 
Estimados.

Estoy intentando leer una planilla excel que tiene varias hojas de las cuales solo necesito los datos de una sola hoja.

He sacado el siguente codigo de un post anterior:
Código Delphi [-]
const
  xlCellTypeLastCell = $0000000B;
var
 Filename : string;
 Excel, Sheet: OLEVariant;
 CantRow, CantCol, i, j : Integer;
 RangoMatriz: Variant;
begin

  OpenDialog.Execute();

  FileName := OpenDialog.FileName;
  Excel := ComObj.CreateOleObject('Excel.Application');
  Excel.Workbooks.Open(FileName);

  Sheet := Excel.Workbooks[ExtractFileName(FileName)].WorkSheets[1];
  Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; <----- error

  Excel.Workbook.Worksheets['LISTA']; <------- Hoja que me interesa
  CantRow := Excel.ActiveCell.Row;
  CantCol := Excel.ActiveCell.Column;

Me da error cuando intenta activar, dicha linea es necesaria ??

Desde ya se agradecen las sugerencias.

Saludos

newtron 17-09-2014 09:58:50

Hola.

Yo para leer un campo de una hoja de excel haria lo siguiente:

Código Delphi [-]
sContenido := Excel.WorkBooks[1].Worksheets[Hoja].Cells[N,M];

donde Hoja es el número de hoja N es el número de fila y M el número de columna.

Saludos

nlsgarcia 17-09-2014 10:00:37

lbidi,

Cita:

Empezado por lbidi
...leer una planilla Excel que tiene varias hojas de las cuales solo necesito los datos de una sola hoja...

:rolleyes:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComObj;

type
  TForm1 = class(TForm)
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
   xlCellTypeLastCell = $0000000B;

var
   FileExcel : String;
   Excel, WrkS : OLEVariant;
   Rows, Cols, i, j : Integer;
   MatrixExcel : Array of Array of Variant;
   MspAPP : String;
   LastCell : Variant;

begin

  OpenDialog1.Filter := 'Excel files|*.xls*';

  if OpenDialog1.Execute then
     FileExcel := OpenDialog1.FileName
  else
     Exit;

  try

     try
        Excel := GetActiveOleObject('Excel.Application');
     except
        Excel := CreateOleObject('Excel.Application');
     end;

     Excel.DisplayAlerts := False;
     Excel.Visible := False;

     Excel.Workbooks.Open(FileExcel);

     WrkS := Excel.Worksheets[1];

     // Obtiene el valor de la última celda de la hoja activa de Excel
     Wrks.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
     LastCell := Excel.ActiveCell.Value;
     MspApp := Format('El valor de la última celda activa de Excel es : %s',[LastCell]);
     MessageDlg(MspApp,mtInformation,[mbOK],0);

     // Obtiene la cantidad de filas y columnas de una hoja de Excel por la última celda activa
     Rows := Excel.ActiveCell.Row;
     Cols := Excel.ActiveCell.Column;

     // Otra forma de obtener la cantidad de filas y columnas de una hoja de Excel
     Rows := WrkS.UsedRange.Rows.Count;
     Cols := WrkS.UsedRange.Columns.Count;

     SetLength(MatrixExcel,Rows,Cols);

     for i := 1 to Rows do
        for j := 1 to Cols do
           MatrixExcel[i-1,j-1] := WrkS.Cells[i, j].Value;

     MspApp := Format('Creada Matrix de Elementos de Excel : Rows %d y Cols %d',[Rows, Cols]);
     MessageDlg(MspApp,mtInformation,[mbOK],0);

  finally

     Excel.Quit;
     Excel := Unassigned;
     WrkS := Unassigned;
     Finalize(MatrixExcel);

  end;

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, genera una matriz dinámica con los datos de una hoja de Excel 2010 por medio de Automatización en Excel.

Revisa esta información
Espero sea útil :)

Nelson.

lbidi 17-09-2014 16:58:34

Muchas gracias Nelson, justo lo que necesitaba.

Saludos cordiales.


La franja horaria es GMT +2. Ahora son las 20:56:59.

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