Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Servers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Es muy grande tu archivo? De ser así, quizá te funcione mejor usar ADO, tal como mencioné en el mensaje 7.

// Saludos
Responder Con Cita
  #2  
Antiguo 26-05-2008
axlrafael axlrafael is offline
Miembro
 
Registrado: abr 2008
Posts: 36
Poder: 0
axlrafael Va por buen camino
Hola amigos, disculpen otra pregunta, ¿como puedo elegir el rango de F13:Q39 con el código que nos proporciono Caro?.

Es decir, tengo un formato de excel ya estandarizado pero los datos que necesito estan en este rango:

F G H I J K L M N Ñ O P Q
13
14
15
..
...
...
39

En el código aparece esto:


Código:
RangoMatriz := Excel.Range['A1', Excel.Cells.Item[CantRow,CantCol]].Value;
Ahi pongo según yo el rango que necesito, pero a la hora de probar me marca error.

Saludos a todos.
Responder Con Cita
  #3  
Antiguo 27-05-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Cita:
Empezado por roman Ver Mensaje
¿Es muy grande tu archivo? De ser así, quizá te funcione mejor usar ADO, tal como mencioné en el mensaje 7.

// Saludos
Vaya!!! no me habia dado cuenta de que el ave fenix habia revivido de sus cenizas ... o hace mucho que no volvia ?... Bueno roman, la verdad el archivo maneja unos casi 40.000 registros, normalmente esta carga al StringGrid que uso me tomaba menos de un minuto... de aqui solo es cuestion de pasarlo a la BD (Uso DBExpress) y para serte sincero no quisiera recurrir a ADO como la primera solucion aunque sea la mas efectiva, pues nunca lo he usado y no quisiera gastar en aprenderlo en este momento... ademas, cuales serian las dll's o bpl's que necesitaria en instalador en caso de que me decida ...
__________________
Web
Responder Con Cita
  #4  
Antiguo 27-05-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Bueno estuve probando ADO y logre esto:

Código Delphi [-]
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + QuotedStr(Edit1.Text) +';Extended Properties=Excel 8.0;Persist Security Info=False';
ADODataSet1.Open;


Aqui le paso al ADOConnection1 el archivo de excel que necesite por medio de un Edit... y luego solo lo abro, hasta funciona mas rapido ; la pregunta del millon sigue siendo, una vez tenga este problema solucionado que dll y bpl necesito para el instalador...

Por cierto gracias por el codigo...





PD: Aca usamos caritas para todo
__________________
Web
Responder Con Cita
  #5  
Antiguo 28-05-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola axlrafael, si necesitas desde el rango F13:Q39, en Range le dices que comience en F13 y cambias en tu ciclos for la cantidad de columnas y filas.

Código Delphi [-]
RangoMatriz := Excel.Range['F13', Excel.Cells.Item[CantRow,CantCol]].Value;
 
  for i:=1 to CantRow-12 do
   begin
    for j:=1 to CantCol-5 do
     begin
      Showmessage(RangoMatriz[i,j]);
      //haces todo lo que necesites hacer
     end;
   end;//for

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #6  
Antiguo 09-01-2012
Avatar de jejo1984
jejo1984 jejo1984 is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 39
Poder: 0
jejo1984 Va por buen camino
Post Importar archivo excel a un stringgrid LAZARUS IDE

Hola que tal amigos espero que me puedan ayudar con lo siguiente:
Bueno quiero abrir un archivo excel en un stringgrid con Lazarus IDE encontre algo similar en este foro pero me marca un error les enseño el codigo:

Código Delphi [-]
unit cf_acceso;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids,
  Buttons,comobj,variants;
........
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;

Bien es en estas líneas de codigo en las que me aparece el error:

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

Error: Incompatible types: got "AnsiString" expected "LongInt"

Código Delphi [-]
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
RangoMatriz := Excel.Range['A1',Excel.Cells.Item[CantRow,CantCol]].Value;

Error: Incompatible types: got "Constant String" expected "LongInt"



Bueno intente esto:

Código Delphi [-]
Sheet := Excel.Workbooks[StrToInt(ExtractFileName(FileName))].WorkSheets[1];
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate; 
RangoMatriz:=Excel.Range[StrToInt('A1'),Excel.Cells.Item[CantRow,CantCol]].Value;

Ejecuta normal pero al dar click en el boton aparece el mensaje:
El proyecto a lanzado una excepcion 'EOLeExceptionEOLeException' con el mensaje:
no se encontro "??????x.xlsx" Comprube ortografia y verificar si la ubicación es correcta.

La ruta es totalmente correcta pero no se lo que pasa por favor si me pueden ayudar con esto.
Gracias

Última edición por roman fecha: 10-01-2012 a las 00:18:02. Razón: Corregir etiquetas [delphi]
Responder Con Cita
  #7  
Antiguo 09-01-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.

Responder Con Cita
  #8  
Antiguo 10-01-2012
Avatar de jejo1984
jejo1984 jejo1984 is offline
Miembro
NULL
 
Registrado: jun 2011
Posts: 39
Poder: 0
jejo1984 Va por buen camino
Ok Casimiro ya esta dame una sugerencia pues en que estoy fallando estoy usando Lazarus IDE
Responder Con Cita
  #9  
Antiguo 28-05-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por felipe88 Ver Mensaje
la pregunta del millon sigue siendo, una vez tenga este problema solucionado que dll y bpl necesito para el instalador...
Hola Felipe88, ADO utiliza MDAC, que viene instalado en el sistema operativo (Windows XP, Millenium, 2000....). Pero si tu aplicación estara instalada en Windows 95 o 98, si necesitas redistribuir e instalar MDAC.

Mas caritas

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.

Última edición por Caro fecha: 28-05-2008 a las 15:29:41.
Responder Con Cita
  #10  
Antiguo 28-05-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.120
Poder: 19
felipe88 Va por buen camino
Cita:
Empezado por Caro Ver Mensaje
Hola Felipe88, ADO utiliza MDAC, que viene instalado en el sistema operativo (Windows XP, Millenium, 2000), pero si es Windows 95 y 98, si necesitas redistribuir e instalar MDAC.

Mas caritas

Saluditos
Gracias Caro, eso me tranquiliza mas...
__________________
Web
Responder Con Cita
  #11  
Antiguo 28-05-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Tengo una pregunta

Hola a todos, estoy leyendo todas las hojas de mi documento de excel, pero si encuentra una hoja vacía me sale un Access Violation al intentar leer la primera celda, como puedo verificar si una hoja esta vacía y asi no leerla, muchísimas gracias por adelantado.

Axrafael, para que no sea muy estatico, puedes obtener también las filas y columnas de tu rango y quedaria asi.

Código Delphi [-]
var
 .....
 CantRowRango, CantColRango, i, j : Integer;
 RangoMatriz: Variant;
 Rango : OleVariant;
begin
  ......................

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

  Rango := Excel.Range['F13', 'Q39'];
 
  RangoMatriz := Rango.Value;
 
  CantRowRango := Rango.Rows.Row;
  CantColRango := Rango.Columns.Column;

  for i:=1 to (CantRow-CantRowRango)+1 do
   begin
    for j:=1 to (CantCol-CantColRango)+1 do
     begin
      //
     end;
   end;//for

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #12  
Antiguo 28-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Caro Ver Mensaje
Hola a todos, estoy leyendo todas las hojas de mi documento de excel, pero si encuentra una hoja vacía me sale un Access Violation al intentar leer la primera celda, como puedo verificar si una hoja esta vacía y asi no leerla, muchísimas gracias por adelantado.
Es raro. Con este código

Código Delphi [-]
var
  ExcelApp, Workbook: OleVariant;
  I: Integer;

begin
  ExcelApp := ComObj.CreateOleObject('Excel.Application');
  Workbook := ExcelApp.Workbooks.Open('C:\ruta\al\documento.xls');

  for I := 1 to WorkBook.Worksheets.Count do
    Memo1.Lines.Add(Workbook.Worksheets[i].Cells[1, 1]);

  ExcelApp.Visible := true;
end;

puedo acceder a la primera celda de cada hoja aun estando vacías.

// Saludos
Responder Con Cita
  #13  
Antiguo 21-08-2008
Avatar de maxid
maxid maxid is offline
Miembro
 
Registrado: ene 2006
Posts: 38
Poder: 0
maxid Va por buen camino
Usa adoconection

Usa un componente AdoConection y un ADODataSet, en la cadena de conexion pone todo esto y en source el archivo excel.

ADOConnection1.ConectionString:= Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=F:\Company\Solicitud\Solicitud.xls;Mode=Share Deny None;Extended Properties=Excel 8.0;Persist Security Info=False;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDBatabase Password="";Jet OLEDB:Engine Type=35;Jet OLEDBatabase Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDBon't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False


Tambien podes poner como una constante y con format(cte_cadenadeconxion,[farchivoexcel])
y trabajas como una tabla y grillas normal, incluso podes acceder a los campos con fieldbyname si sabes como se llaman de antemano.
Enlaza en el AdoConection con ADODataSet y en ADODataSet1.CommandText tenes las pestañas del archivo
__________________
Maestro no solo es el que conoce sino el que comparte lo que sabe.
Responder Con Cita
  #14  
Antiguo 22-08-2008
ledesmarc ledesmarc is offline
Miembro
 
Registrado: jun 2008
Posts: 24
Poder: 0
ledesmarc Va por buen camino
Muchas Gracias por la Data, ahora lo pruebo..

Saludos
Responder Con Cita
  #15  
Antiguo 15-09-2008
Rancy Rancy is offline
Miembro
 
Registrado: may 2008
Posts: 17
Poder: 0
Rancy Va por buen camino
Hola
Tengo un problema con el código que escribió Caro en la primera pagina (era el siguiente):

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.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

Concretamente mi problema esta en esta línea:
Código Delphi [-]
Excel := CreateOleObject('Excel.Application');

El error es Undeclared identifier 'CreateOleObject'

Además, a intervalos regulares me aparece el mensage de error:
Unable to cast object of type 'Borland.Delphi.VariantType' to type 'Borland.Delphi.Unit'

Y no se como solucionar ninguna de las dos cosas. Tal vez sea algo muy básico, ya que a los demas que han probado el código les ha funcionado perfectamente. Alguna idea de por dónde puede ir el error?

Mi intención es leer el documento excel para luego ir guardando la información listada. Uso delphi 2007, por si es de utilidad saberlo.
Sinceramente estoy bastante perdido.

Gracias por adelantado.
Responder Con Cita
  #16  
Antiguo 15-09-2008
Rancy Rancy is offline
Miembro
 
Registrado: may 2008
Posts: 17
Poder: 0
Rancy Va por buen camino
Ok, ya suponía que estaba cometiendo un error muy básico

Me faltaba completar los "uses"! Vaya noob estoy hecho.

Aunque el error:
Unable to cast object of type 'Borland.Delphi.VariantType' to type 'Borland.Delphi.Unit'

Sigue apareciendo... Es bastante molesto, aunque el código se compila sin problemas.

Si alguien sabe como puedo solucionarlo, se lo agradecería.
Responder Con Cita
  #17  
Antiguo 18-10-2012
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Poder: 20
Anel Hernandez Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
importar datos de excel a firebird Choclito Varios 6 06-02-2007 02:26:10
como importar informacion a mi base de datos desde un disket ibbeth Firebird e Interbase 13 20-01-2007 10:18:38
Importar desde Excel Lucas_diaz1810 Conexión con bases de datos 5 03-11-2006 18:15:26
Importar desde Excel LucasArgentino SQL 1 24-12-2003 17:33:26
importar datos de excel a mi aplicacion squenda Varios 2 11-12-2003 03:33:32


La franja horaria es GMT +2. Ahora son las 07:48:50.


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
Copyright 1996-2007 Club Delphi