Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Como importar datos desde Excel? (https://www.clubdelphi.com/foros/showthread.php?t=55728)

Casimiro Notevi 10-01-2012 14:01:39

Evidentemente, no puedes convertir a integer un cadena de texto.

¿Y exactamente en qué línea es eso?, ¿has seguido el programa con del depurador?

jejo1984 10-01-2012 15:21:43

Claro que si voy a pegar nuevamente el código y de color rojo las líneas donde aparece el error:
Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
const
  xlCellTypeLastCell = $0000000B;
var
 Excel, Sheet,Book: OLEVariant;
 CantRow, CantCol, i, j : Integer;
 RangoMatriz: Variant;
 FileName:String;

begin
  FileName:='C:\SISTEMAPLANILLAS\Libro2.xlsx';
  try
  Excel := CreateOleObject('Excel.Application');
  Excel.Workbooks.Open(FileName);
  ShowMessage(FileName);
  Sheet := Excel.Workbooks[ExtractFileName(FileName)].WorkSheets[1];
  Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

  CantRow := Excel.ActiveCell.Row;
  CantCol := Excel.ActiveCell.Column;

  RangoMatriz := Excel.Range['A1',Excel.Cells.Item[CantRow,CantCol]].Value;

  for i:=1 to CantRow do
   begin
    for j:=1 to CantCol do
     begin
      Showmessage(RangoMatriz[i,j]);
      //haces todo lo que necesites hacer
     end;
   end;//for
   finally
   Excel.Quit; //Aquí cerramos la hoja de Excel
   end;
end;

Como comente le agregue StrToInt funca normal pero ya se perdería pues por que ya pasa a integer.
Como podre solucionarlo...

jejo1984 10-01-2012 15:29:03

Las variables que utilizo:
Código Delphi [-]
const
  xlCellTypeLastCell = $0000000B;
var
 Excel, Sheet,Book: OLEVariant;
 CantRow, CantCol, i, j : Integer;
 RangoMatriz: Variant;
 FileName:String;

La primera línea en que me marca lo siguiente:
Código Delphi [-]
Sheet := Excel.Workbooks[ExtractFileName(FileName)].WorkSheets[1];
Error: Incompatible types: got "AnsiString" expected "LongInt"

La segunda igual:
Código Delphi [-]
RangoMatriz := Excel.Range['A1',Excel.Cells.Item[CantRow,CantCol]].Value;
Error: Incompatible types: got "Constant String" expected "LongInt"

Pienso que el error es por:
ExtractFileName(FileName) y 'A1'

jejo1984 16-01-2012 13:58:36

Hola de nuevo alguien que me pueda decir en que estoy errando no quiero usar otro componente por que la verdad se que se puedo hacer lo que quiero yo

roman 16-01-2012 18:25:00

Quizá no seas tú quien yerre sino Lázarus o FP. Un código similar al que pones corre sin problemas en Delphi, pero parece que FPC no acepta que los índices sean cadenas de caracteres.

El primer error podrías solventarlo usando un índice numérico en lugar del nombre para obtener una referencia al libro:

Código Delphi [-]
Sheet := Excel.Workbooks[1].WorkSheets[1];

El segundo error no veo como pues no habría un equivalente numérico al índice 'A1'. Pero puedes intentar poniendo:

Código Delphi [-]
var
  Celda: OleVariant;
  ...

begin
  ...
  Celda := 'A1';
  RangoMatriz := Excel.Range[Celda, Excel.Cells.Item[CantRow,CantCol]].Value;

Digo, no sé si funcione, pero nada se pierde con intentar.

// Saludos

jejo1984 16-01-2012 18:50:53

Roman usted si que es bueno =)
ahora me aparece un error en esta línea:
Código Delphi [-]
var
 Excel,celda,Sheet: OLEVariant;
 CantRow, CantCol, i, j : Integer;
 RangoMatriz,FileName: Variant;
 //FileName:String;

begin
  FileName:='C:\SISTEMAPLANILLAS\Libro2.xlsx';
  try
  Excel := CreateOleObject('Excel.Application');
  Excel.Workbooks.Open(FileName);
  ShowMessage(FileName);
  Sheet := Excel.Workbooks[1].WorkSheets[1];

y marca este error:
Código Delphi [-]
Invalid argument:Dispatch

jejo1984 16-01-2012 18:52:07

El error dice:
Invalid argument: Dispatch
y señala a esta línea:
Sheet := Excel.Workbooks[1].WorkSheets[1];

roman 17-01-2012 18:35:42

Hola,

Tal parece que esto es una falla de FPC. En este mismo enlace mencionan que el problema se ha resuelto con versiones posteriores, pero parece que no es tan sencillo hacer que la última versión estable de Lázarus trabaje con otra versión de FPC que no sea la 2.4.x. Sin embargo, ahí mismo menciona una versión "snapshot" de Lázarus que utiliza la versión 2.5.1 de FPC.

Instalando esa, he podido ejecutar correctamente un código similar:

Código Delphi [-]
const
  xlCellTypeLastCell = $0000000B;

var
  Excel, Hoja, Rango: OleVariant;
  NumFilas, NumColumnas: Integer;

begin
  Excel := CreateOleObject('Excel.Application');

  try
    Excel.Workbooks.Open('c:\ruta\al\archivo.xlsx');
    Hoja := Excel.Workbooks[1].Worksheets[1];
    Hoja.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
    NumFilas := Excel.ActiveCell.Row;
    NumColumnas := Excel.ActiveCell.Column;
    Rango := Excel.Range['A1', Excel.Cells.Item[NumFilas, NumColumnas]].Value;

    Showmessage(Rango[1, 1]);
  finally
    Excel.Quit;
  end;
end;

// Saludos

Chaja 12-03-2012 05:33:57

Lectura de excel con ADO Campos sin datos
 
Roman: Hola... te escribo por que estaba buscadno un tema con referencia a la importacion de datos desde excel, y me encuentro con un tema. Usa la forma de hacerlos con los ADO comp. uso como se ha explicado en el foro y todo eso y se hace bien. todo bien, hasta que me sucede lo siguiente. No se por que algunos valors de la tabla de excel me los trae vacios, concretamenete los que son valores enteros, como controlo eso? la hoja de excel es:
5588/1 Pelota Futbol CLUB 42.00
5589/1 Pelota Futbol Master 42.00
5589/2
Pelota Master Color 42.00
11 Pelota Fox Nº 4 52.00
17 Arco Futbol 1.83 x 1.22 x.60 149.00
17/A Arco Futbol 2.40 x 1.52 x 0.90 239.00
17/B Arco Futbol 3.02 x 2.07 x 1.18 349.00
18 Pelota Futsala Pro cosida 54.00
20
Silbato fox 40 striker 9.90
21 Collarines x 12 Unidades 18.90
22 Silbato fox 40 dolfin 18.90
23 Silbato Fox Micro C/C 24.90
24 Silbato Fox 40 classic 21.90
24D Silbato Fox 40 clasicc color surt x12 262.00
25 Silbato Fox 40 Pearl 11.90
26 Silbato Fox 40 con cronometro 139.00
27 Silbato fox Shark c/collarin 29.90
28 Collarin Fox x12 69.00

por ejemplo los codigo 11 17 24 25 26 27 28 no me levanta los datos , si el resto pero esos valores no. Para que lo haga debo ir al excel y editar uno por uno para que sea un texto. si son poco no pasa nada, pero como debo importar mas de 1000 lineas se complica.
Alguna sugerencia?

Gracias

Luis Roldan
Mar del Plata
Argentina

Jetzuvely21 18-05-2012 16:55:58

Hola Jejo, ¿Pudiste solucionar tu problema?. Al parecer solo tienes que indicar la ruta del archivo, el nombre del archivo no.Por eso es que te marca que la ruta está mal. Posteriormente luego seleccionas tu archivo y lo abres.Bueno a mi me resultó asi.

Saludos!

Anel Hernandez 18-10-2012 13:38:14

Hola,

he tratado de correr el ejemplo de Caro y me da error en la linea:
Código Delphi [-]
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;

el error dice 'Error en el metodo Activate de la clase range'.

Si quito la linea, entonces CantRow y CantCol me dan 1 y 1 respectivamente. Que debo hacer?

gracias


La franja horaria es GMT +2. Ahora son las 14:50:18.

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