Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Servers
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-04-2008
axlrafael axlrafael is offline
Miembro
 
Registrado: abr 2008
Posts: 36
Poder: 0
axlrafael Va por buen camino
Como importar datos desde Excel?

Hola que tal amigos, miren tengo un problema, necesito que en mi aplicación se pueda cargar datos desde hojas de excel a campos de tipo "Edit", pero no se ni como empezar. Por favor con que componentes se puede hacer esto? ya he estado buscando en varios foros pero la mayoria son para guardar hojas de Excel.

Miren la cuestión es esta, tengo un control de articulos de inventario en excel donde van separadas por grupo y por mes de esta forma:

gpo || ENE || FEB || MAR || ABR || MAY ||.....|| DIC|| || TOT ||

1 'EDIT1' 'EDIT2' 'EDIT3' 'EDIT4' .......... 'EDITX' 'EDITXX'
2 'EDITX' 'EDITX' 'EDITX' 'EDITX' ......... 'EDITX' 'EDITXX'
3 'EDIT1' 'EDIT2' 'EDIT3' 'EDIT4' .......... 'EDITX' 'EDITXX'
4 'EDIT1' 'EDIT2' 'EDIT3' 'EDIT4' .......... 'EDITX' 'EDITXX'
..
..
10 'EDIT1' 'EDIT2' 'EDIT3' 'EDIT4' .......... 'EDITX' 'EDITXX'


En mi aplicación esta forma de igual manera, entonces quiero buscar un archivo, recoger la ruta en otro edit y con otro botón iniciar la transferencia de los datos colocados exactamente en los "edits" correspondientes.
Bueno esa es mi idea, si ustedes usan otra manera para hacer algo similar por favor ayudame compartiendola y diciendome que componentes usar.

De antemano gracias por su atención y les deseo suerte en sus proyectos .
Responder Con Cita
  #2  
Antiguo 24-04-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Talcahuano - Chile
Posts: 2.291
Poder: 17
BlueSteel Va por buen camino
Cool utiliza un DataSet

Cita:
Empezado por axlrafael Ver Mensaje
Hola que tal amigos, miren tengo un problema, necesito que en mi aplicación se pueda cargar datos desde hojas de excel a campos de tipo "Edit", pero no se ni como empezar. Por favor con que componentes se puede hacer esto? ya he estado buscando en varios foros pero la mayoria son para guardar hojas de Excel.

Miren la cuestión es esta, tengo un control de articulos de inventario en excel donde van separadas por grupo y por mes de esta forma:

gpo || ENE || FEB || MAR || ABR || MAY ||.....|| DIC|| || TOT ||

1 'EDIT1' 'EDIT2' 'EDIT3' 'EDIT4' .......... 'EDITX' 'EDITXX'
2 'EDITX' 'EDITX' 'EDITX' 'EDITX' ......... 'EDITX' 'EDITXX'
3 'EDIT1' 'EDIT2' 'EDIT3' 'EDIT4' .......... 'EDITX' 'EDITXX'
4 'EDIT1' 'EDIT2' 'EDIT3' 'EDIT4' .......... 'EDITX' 'EDITXX'
..
..
10 'EDIT1' 'EDIT2' 'EDIT3' 'EDIT4' .......... 'EDITX' 'EDITXX'


En mi aplicación esta forma de igual manera, entonces quiero buscar un archivo, recoger la ruta en otro edit y con otro botón iniciar la transferencia de los datos colocados exactamente en los "edits" correspondientes.
Bueno esa es mi idea, si ustedes usan otra manera para hacer algo similar por favor ayudame compartiendola y diciendome que componentes usar.

De antemano gracias por su atención y les deseo suerte en sus proyectos .
Hola axlrafael

Primero que nada Bienvenido al Club... te sugiero que te leas la guia de estilo

Para tu caso puedes utilizar lo sgte.. Utilizar un componente de tipo DataSet (en la Jedi encuentras el JvDataSet).. vincularlo al archivo de Excel.. y mostrar los datos en un DBGrid que este vinculado al DataSet... yo utilizo ese metodo para capturar los datos desde un archivo de texto con columnas fijas... y me va de maravillas

Mira, este codigo es para activar el DataSet (DTexto)...
Código Delphi [-]
     DTexto.Active   := False;
     DTexto.FileName := Concat(Label1.Caption,'\',Archivo.Text); //Obtengo la ruta de un DirectoryListBox y FileListBox..
     DTexto.Active   := True;

Edito; me falto mencionar que al DataSet le puedes crear la cantidad de columnas que necesites y asigna los campos... con el tamaño (ancho o largo) que quieras

Si necesitas más ayuda.. pregunta

Salu2
__________________
BlueSteel

Última edición por BlueSteel fecha: 24-04-2008 a las 22:19:04. Razón: falto explicación
Responder Con Cita
  #3  
Antiguo 25-04-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 16
Caro Va por buen camino
Hola axlrafael, también lo puedes hacer 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.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

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
  #4  
Antiguo 26-04-2008
axlrafael axlrafael is offline
Miembro
 
Registrado: abr 2008
Posts: 36
Poder: 0
axlrafael Va por buen camino
Muchas gracias amigo, tratare de hacerlo ahorita como ustedes me dijeron, solo otra cosita por favor, cuales componentes debo utilizar para hacer esto??

gracias
Responder Con Cita
  #5  
Antiguo 27-04-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Talcahuano - Chile
Posts: 2.291
Poder: 17
BlueSteel Va por buen camino
Cool

Cita:
Empezado por axlrafael Ver Mensaje
Muchas gracias amigo, tratare de hacerlo ahorita como ustedes me dijeron, solo otra cosita por favor, cuales componentes debo utilizar para hacer esto??

gracias

Hola, creo que en el ejemplo de caro, no tienes que usar ningun componente en especial...

en el mode de importar los datos desde excel que te dí yo, te describo que componentes se utilizan...

Cita:
Para tu caso puedes utilizar lo sgte.. Utilizar un componente de tipo DataSet (en la Jedi encuentras el JvDataSet).. vincularlo al archivo de Excel.. y mostrar los datos en un DBGrid que este vinculado al DataSet... yo utilizo ese metodo para capturar los datos desde un archivo de texto con columnas fijas... y me va de maravillas
Salu2
__________________
BlueSteel
Responder Con Cita
  #6  
Antiguo 28-04-2008
axlrafael axlrafael is offline
Miembro
 
Registrado: abr 2008
Posts: 36
Poder: 0
axlrafael Va por buen camino
Hola disculpen, se me olvido mencionar que trabajo con Delphi 6. Para mi amigo BlueSteel, perdoname pero no encuentro el componente DataSet ni tampoco la Jedi ni el JvDataSet .
Responder Con Cita
  #7  
Antiguo 28-04-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.052
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
También puedes usar los componentes ADO. Aquí hay detalles de cómo usarlos para acceder a una hoja de Excel.

// Saludos
Responder Con Cita
  #8  
Antiguo 28-04-2008
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Talcahuano - Chile
Posts: 2.291
Poder: 17
BlueSteel Va por buen camino
Cool

Cita:
Empezado por axlrafael Ver Mensaje
Hola disculpen, se me olvido mencionar que trabajo con Delphi 6. Para mi amigo BlueSteel, perdoname pero no encuentro el componente DataSet ni tampoco la Jedi ni el JvDataSet .
Hola...

Para encontrar esos componentes, debes intalar el Pack de Jedi..JCV y JCVL... no se si estan aquí... pero en más de un foro se ha tratado

Salu2

Revisa este link... donde puedes descargar dicho componente
__________________
BlueSteel

Última edición por BlueSteel fecha: 28-04-2008 a las 21:21:27.
Responder Con Cita
  #9  
Antiguo 06-05-2008
axlrafael axlrafael is offline
Miembro
 
Registrado: abr 2008
Posts: 36
Poder: 0
axlrafael Va por buen camino
Muchisimas gracias Caro, me sirvio de mucho tu código, te debo una
Responder Con Cita
  #10  
Antiguo 08-05-2008
axlrafael axlrafael is offline
Miembro
 
Registrado: abr 2008
Posts: 36
Poder: 0
axlrafael Va por buen camino
Me resulto un problema ¡¡¡

Hola Caro, quiero preguntarte ¿porque es que despues de utilizar el archivo de excel en mi aplicación ya no me deja abrirlo de nueva cuenta?, he notado que cuando jalo cualquier archivo Excel en la aplicación no me deja abrirlo, me lo abre de tipo solo lectura y por logica no me deja guardarlo si lo quiero modificar.

Tambien note que en el administrador de tareas me abre tantas veces intente abrir yo el mismo archivo que utilice en la aplicación un proceso que es el de Excel ("EXCEL.EXE")

Espero que me puedas ayudar de nuevacuenta.

Saludos y suerte
Responder Con Cita
  #11  
Antiguo 09-05-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 16
Caro Va por buen camino
Hola axlrafael, lo que pasa es que en el codigo que te pase, no estamos cerrando la hoja de excel, aumenta lo siguiente:

Código Delphi [-]
  FileName := 'C:\Archivo.xls';
  try
   Excel := CreateOleObject('Excel.Application');
   Excel.Workbooks.Open(FileName);
   ...........
   ..........
   for i:=1 to CantRow do
    begin
     for j:=1 to CantCol do
      begin
       Showmessage(RangoMatriz[i,j]);
      end;
    end;//for
  finally
   Excel.Quit; //Aquí cerramos la hoja de Excel
  end;

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 09-05-2008
axlrafael axlrafael is offline
Miembro
 
Registrado: abr 2008
Posts: 36
Poder: 0
axlrafael Va por buen camino
Gracias Caro, ya quedo resuelto mi problema.

Suerte
Responder Con Cita
  #13  
Antiguo 21-05-2008
faustino36 faustino36 is offline
Registrado
 
Registrado: ago 2007
Posts: 3
Poder: 0
faustino36 Va por buen camino
Que tal, he probado el codigo y funciona muy bien. Alguien sabe como listar las hojas que contiene el documento de excel; en el ejemplo se muestra utilizando la hoja, pero quisiera hacer dinamica esta parte y permitir que el usuario escoja la hoja que desee, alguien sabe como hacer esto?
Responder Con Cita
  #14  
Antiguo 21-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.052
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
Por ejemplo:

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

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

  Workbook := Excel.Workbooks.Open('C:\ruta\al\documento.xls');
  for I := 1 to Workbook.Worksheets.Count do
    Memo1.Lines.Add(Workbook.Worksheets[i].Name);

  Excel.Visible := true;
end;

Posteriormente puedes hacer referencia a una hoja ya sea con el índice numérico o con el nombre:

Código Delphi [-]
Workbook.Worksheets[2]
Workbook.Worksheets['Hoja2']

// Saludos
Responder Con Cita
  #15  
Antiguo 21-05-2008
faustino36 faustino36 is offline
Registrado
 
Registrado: ago 2007
Posts: 3
Poder: 0
faustino36 Va por buen camino
Muchas gracias, era exactamente lo que buscaba, ya lo pude implementar, gracias de nuevo
Responder Con Cita
  #16  
Antiguo 26-05-2008
Avatar de felipe88
[felipe88] felipe88 is offline
Miembro Premium
 
Registrado: may 2007
Ubicación: Mi Valle del Cauca... Colombia!!!
Posts: 1.123
Poder: 12
felipe88 Va por buen camino
Hola compañeros del club... buscando otras alternativas para importar datos de excel (En mi caso para Firebird), encuentro generalmente este codigo que ustedes proponen, pero ultimamente tengo un problema con el mismo ya que de un momento a otro me salio el error "Out of memory" y no me completa la carga del archivo; por eso me gustaria saber si conocen de la posible causa de la aparicion de este error y una posible solucion... de antemano gracias

Saludos ...
__________________
Web
Responder Con Cita
  #17  
Antiguo 26-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.052
Poder: 10
roman Tiene un aura espectacularroman Tiene un aura espectacular
¿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
  #18  
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
  #19  
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.123
Poder: 12
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
  #20  
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.123
Poder: 12
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
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 00:31:28.


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