Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-07-2011
CFPA86 CFPA86 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Medellin (Colombia)
Posts: 119
Poder: 21
CFPA86 Va por buen camino
Consejo sobre excel

Hola amigos foristas, tengo un programa al cual le deseo IMPORTAR datos de un archivo de excel, el cual tiene dos hojas, recurro a ustedes para que me orienten como debo de hacerlo.
Chao
__________________
Siempre hay un primer momento para todo.
Responder Con Cita
  #2  
Antiguo 04-07-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Hola.

Aquí llevas un ejemplo.

Código Delphi [-]
procedure TFormImportaExcel.NTButton1Click(Sender: TObject);
var
  appExcel : Variant;
  N, Hoja : SmallInt;
  contenido : String;
begin
  appExcel := CreateOleObject('Excel.Application');
  appExcel.WorkBooks.Open('C:\ARCHIVO.XLS');
  Hoja:=1;
  N:=0;
  while true do begin
    Inc(N);
    Contenido := appExcel.WorkBooks[1].Worksheets[Hoja].Cells[N,1];
    if Contenido='' then break
  end;
  appExcel.Quit;
  appExcel := Unassigned;
end;

Espero que te sirva.
Saludos
Responder Con Cita
  #3  
Antiguo 04-07-2011
CFPA86 CFPA86 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Medellin (Colombia)
Posts: 119
Poder: 21
CFPA86 Va por buen camino
Gracias Newtron por el codigo, pero en el formulario o en el programa que debo de hacer para aplicar este codigo, que se es de mucha ayuda.
Chao
__________________
Siempre hay un primer momento para todo.
Responder Con Cita
  #4  
Antiguo 05-07-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
A ver.

Si le echas un vistazo al código verás que se abre el archivo excel y lo va recorriendo linea por linea poniendo en la variable "contenido" el valor de la primera celda de la hoja número 1 hasta que se encuentra un valor vacío que se interpreta como el final de la hoja. Lo que debes de hacer es abrir tu tabla e ir añadiendo registros y asignando los campos de la hoja excel a los campos del registro que quieras insertar.

Saludos
Responder Con Cita
  #5  
Antiguo 06-07-2011
CFPA86 CFPA86 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Medellin (Colombia)
Posts: 119
Poder: 21
CFPA86 Va por buen camino
Que pena con todos ustedes, pero nuevamente les dijo no se como aplicar este codigo, entiendo lo que dice pero no se como o por medio de que componente(s) usarlo en el formulario, en esto de la importacion y exportacion de datos soy nuevo, nunca lo he realizado en mis aplicaciones. Es por esto que les pido nuevamente ayuda.
Gracias
__________________
Siempre hay un primer momento para todo.
Responder Con Cita
  #6  
Antiguo 08-07-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
A ver.... empezamos desde el principio. Dices que tienes un programa, imagino que en tu programa abrirás la base de datos, insertarás registros, etc, ¿no?. ¿Qué base de datos usas? ¿de escritorio? ¿cliente/servidor? ¿qué componentes?.
Responder Con Cita
  #7  
Antiguo 08-07-2011
CFPA86 CFPA86 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Medellin (Colombia)
Posts: 119
Poder: 21
CFPA86 Va por buen camino
Correcto Newtron, en mi programa creo, inserto y modifico registros de una b.d. (paradox 7), hasta aca todo va bien, leyendo me he enterado de los componentes ado que hacen lo que requiero insertar datos de excel. ahi esta el problema no se como usarlos.
Gracias.
__________________
Siempre hay un primer momento para todo.
Responder Con Cita
  #8  
Antiguo 09-07-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
No necesitas usar ado para esto, puedes usar el componente ttable e ir añadiendo registros de forma normal.

Código Delphi [-]
procedure TFormImportaExcel.NTButton1Click(Sender: TObject);
var
   appExcel : Variant;
   N, Hoja : SmallInt;
   contenido : String;
   begin
   appExcel := CreateOleObject('Excel.Application');
   appExcel.WorkBooks.Open('C:\ARCHIVO.XLS');
   Hoja:=1;
   N:=0;
   while true do begin
    if Contenido='' then break     Tabla.append;
    Inc(N);     Contenido := appExcel.WorkBooks[1].Worksheets[Hoja].Cells[N,1]; //codigo
    Tabla.FieldByname('CODIGO').AsString:=Contenido;
    Contenido := appExcel.WorkBooks[1].Worksheets[Hoja].Cells[N,2]; //Nombre
    Tabla.FieldByname('NOMBRE').AsString:=Contenido;
    // y así tantos campos como tengas por cada registro 
    Tabla.post;
   end;
   appExcel.Quit;
   appExcel := Unassigned;
 end;
Responder Con Cita
  #9  
Antiguo 11-07-2011
CFPA86 CFPA86 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Medellin (Colombia)
Posts: 119
Poder: 21
CFPA86 Va por buen camino
Les quiero agradecer a todos y especialmente a Newtron, fue de gran ayuda tus codigos, logre resolver mi problema, respecto a el codigo (ultimo) use la libreria ComObj (no sabia) ademas las instrucciones dentro del ciclo.
if Contenido = '' then
break;
Las coloque al final del mismo ciclo, lo expreso para referencias futuras de otros usuarios.
Reitero mis agradecimientos a todos.
Chao
__________________
Siempre hay un primer momento para todo.
Responder Con Cita
  #10  
Antiguo 19-07-2011
Avatar de alej.villa
alej.villa alej.villa is offline
Miembro
NULL
 
Registrado: may 2011
Ubicación: Caracas, Venezuela
Posts: 76
Poder: 14
alej.villa Va por buen camino
yo tengo un problema parecido con excel pero es mas complicado porque los datos que estan en la hoja no tienen una secuencia sino que son datos que los arroja un query de otro programa y me lo manda a excel de una manera desordenada, como puediera hacer para seleccionar solo los datos que necesito e irlos guardando en mi base de datos, Utilizo delphi 7 y motor de base MS SQL Server 2005
Responder Con Cita
  #11  
Antiguo 19-07-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Si los tienes en una query es como si estuvieran en una tabla, ¿no?, es cuestión de que los vayas cogiendo de un sitio e ir poniendolos en otro. No llego a entender el problema que comentas.
Responder Con Cita
  #12  
Antiguo 19-07-2011
Avatar de alej.villa
alej.villa alej.villa is offline
Miembro
NULL
 
Registrado: may 2011
Ubicación: Caracas, Venezuela
Posts: 76
Poder: 14
alej.villa Va por buen camino
he aqui el problema, los datos me los exportan desde otro programa que yo no estoy desarrollando (el programa que los exporta es macpac o algo asi) me los pasa a excel de una manera inentendible para poderlos importar a mi base de datos que esta enlazada con el programa que estoy desarrollando fijate [IMG]file:///C:/Documents%20and%20Settings/Jos%C3%A9%20Villarroel/Escritorio/Dibujo.JPG[/IMG]
Responder Con Cita
  #13  
Antiguo 19-07-2011
Avatar de alej.villa
alej.villa alej.villa is offline
Miembro
NULL
 
Registrado: may 2011
Ubicación: Caracas, Venezuela
Posts: 76
Poder: 14
alej.villa Va por buen camino
hay muchos espacios en blanco entre las columnas y luego siguen datos, por ejemplo
columna A | Columna B | Columna C |
L31 | | 10000 |
| 2 | 10000 |
| 2 | 10000 |
| 1 | 10000 |
L17 | | 20000 |
| 1 | 20000 |
| 1 | 20000 |

Y asi sucesivamente hasta tener 37000 registros los cuales debo ingresarlos a la base datos pero solo los datos que necesite para mi programa
Responder Con Cita
  #14  
Antiguo 19-07-2011
Avatar de alej.villa
alej.villa alej.villa is offline
Miembro
NULL
 
Registrado: may 2011
Ubicación: Caracas, Venezuela
Posts: 76
Poder: 14
alej.villa Va por buen camino
nose como subir una imagen para que veas mejor la problematica existente, si sabes como puedo montar una imagen seria estupendo asi entenderias mejor

Gracias!
Responder Con Cita
  #15  
Antiguo 19-07-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.474
Poder: 21
newtron Va camino a la fama
Pero yo pregunto, ¿los datos los tienes en una sola cadena o tienes un campo del query para cada campo de datos?
Responder Con Cita
  #16  
Antiguo 19-07-2011
Avatar de alej.villa
alej.villa alej.villa is offline
Miembro
NULL
 
Registrado: may 2011
Ubicación: Caracas, Venezuela
Posts: 76
Poder: 14
alej.villa Va por buen camino
Supongo que el query tiene campos para cada campo de datos, lo que pasa es que no puedo ver el codigo fuente de ese programa, te recuerdo que ese programa ya esta implementado y es una herramienta del programa que permite hacer un filtrado de datos para exportarlos a excel
Responder Con Cita
  #17  
Antiguo 31-07-2011
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por alej.villa Ver Mensaje
Supongo que el query tiene campos para cada campo de datos, lo que pasa es que no puedo ver el codigo fuente de ese programa, te recuerdo que ese programa ya esta implementado y es una herramienta del programa que permite hacer un filtrado de datos para exportarlos a excel
Que tal Alej.villa

Mira parece ser que con la información que nos brindas no te podemos ayudar demasiado. Dejame si entiendo algo.

Tu quieres IMPORTAR algunos datos del archivo XLS que te genera el otro sistema, bien yo he exportado datos a archivos XLS usando un componente llamado TXLSExportFile. Lo que no he hecho es IMPORTAR desde un archivo de Excel a mi aplicación, pero lo que si hago es lo siguiente:

Uso plantillas de Excel y desde Delphi descargo los datos en el archivo XLS, el cual ya tiene un formato predefinido....bordes, negritas, tamaño de la fuente, etc. y lo grabo con otro nombre....talvez algo asi te pueda servir haciendo esto mismo pero al reves....

te paso algo de codigo.

Código Delphi [-]
procedure TfrmOpNumeralia.BitBtn1Click(Sender: TObject);
var
   XLS : TXLSFile;
   Libro, Excel:VAriant;
   cArchivo:String;
   nHoja,I,J,nCont,Lin,nBloque:Integer;
   Archivos_SQL:Array[0..13] of string;
begin
    Archivos_SQL[0] :=ExtractFilePath(Application.ExeName)+'\SQLS\num_lec_mas_venden_sub.sql';
En el codigo anterior declaro XLS como TXLSFile....

El el siguiente inicializo la variable XLS y le creo la clase
Código Delphi [-]
    if Application.MessageBox('Confirma la ejecucion del proceso','Confirmacion',mb_OkCancel+mb_IconQuestion)=idOk then
    begin
         nBloque:=0;
         XLS:=TXLSFile.Create;

Y aqui abro la plantilla de Excel e inicializo la variable nHoja a 0, ya que esta me servira para ir brincando las hojas del archivo de excel y vaciar datos.
Código Delphi [-]
         XLS.OpenFile(ExtractFilePath(Application.ExeName)+'\Plantillas\Numeralia_2010.xlt');
         nHoja:=0;

Un ejemplo de como vaciar datos a las celdas.
Código Delphi [-]
         xls.Workbook.Sheets[nHoja].Cells[3,0].Value:='Numeralia:'+cbxMes.Items[cbxMes.itemindex]+' '+mskAnio.Text;
         xls.Workbook.Sheets[nHoja].Cells[1,0].Value:=qryPAS.fieldbyname('descripcion').AsString;

Y despues lleno el archivo de Excel con un Query...componente TQuery

Código Delphi [-]
         For i:=0 to J do
         begin
              qryDatos.SQL.LoadFromFile(Archivos_SQL[i]);
              qryDatos.Close;
              qryDatos.ParamByName('MES').AsInteger:=cbxMes.ItemIndex+1;
              qryDatos.ParamByName('ANIO').AsString:=mskAnio.Text;
              qryDatos.Open;
              qryDatos.First;
              While not(qryDatos.Eof) do
              begin
                   With xls.Workbook.Sheets[nHoja] do
                   begin
                      Cells[Lin,1].Value := qryDatos.FieldByName('LECHER').AsInteger;
                      Cells[Lin,2].Value := qryDatos.FieldByName('NOMBRELECH').AsString;
                      Cells[Lin,3].Value := qryDatos.FieldByName('CANTIDAD').AsFloat;
                      Lin:=Lin+1;
                      pBar.Position:=pBar.Position+pBar.Step;
                      qryDatos.Next;
                   end;
              end;
              Lin:=Lin+4;
              nBloque:=nBloque+1;
              if nBloque=4 then
              begin
                 nHoja:=nHoja+1;
                 Lin:=8;
                 nBloque:=0;
              end;
         end;

Espero haberte ayudado.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #18  
Antiguo 02-08-2011
Avatar de alej.villa
alej.villa alej.villa is offline
Miembro
NULL
 
Registrado: may 2011
Ubicación: Caracas, Venezuela
Posts: 76
Poder: 14
alej.villa Va por buen camino
hola mRoman gracias por el codigo enviado pero mi problema esta en que tengo un archivo de excel con muchos datos que necesito y otros datos basura (por asi llamarlo) el otro detalle es que tengo muchos campos en blanco entre los datos que necesito importar a mi sistema, quizas puedas decirme como hago para montar una imagen en el foro para que lo veas https://dl-web.dropbox.com/get/Foro/...JPG?w=b1802d31
Responder Con Cita
  #19  
Antiguo 03-08-2011
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por alej.villa Ver Mensaje
hola mRoman gracias por el codigo enviado pero mi problema esta en que tengo un archivo de excel con muchos datos que necesito y otros datos basura (por asi llamarlo) el otro detalle es que tengo muchos campos en blanco entre los datos que necesito importar a mi sistema, quizas puedas decirme como hago para montar una imagen en el foro para que lo veas https://dl-web.dropbox.com/get/Foro/...JPG?w=b1802d31
Bueno nunca he puesto una imagen en el foro,pero vamos haciendo una prueba. En la parte final de cada comentario, del lado derecho, aparece un botòn que dice "Cita" ahi le di click.

Deja hago una prueba......

Fiajete que por aqui es muy complicado....sobre todo por el tamaño....no sè si por FTP del foro se pueda.

Algun moderador que nos pudiera auxiliar....
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #20  
Antiguo 03-08-2011
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Hice una prueba por FTP....y se subio la imagen....solo que acepta archivos ZIP y RAR...
Checalo !!...envie una imagen de prueba....

Prometo quitarla despues de algunos dias....
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
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
Consejo sobre servicio Web apicito Internet 4 31-07-2008 16:56:41
Consejo sobre reporteador eduarcol Impresión 3 02-04-2008 19:08:47
Consejo Automatizacion Excel Builder C++ alt126 C++ Builder 0 14-04-2005 10:52:04
Consejo sobre uso de contraseña. alfredosg19 Varios 2 08-03-2005 14:22:43
Consejo sobre indexación JODELSA Conexión con bases de datos 1 19-05-2003 19:05:34


La franja horaria es GMT +2. Ahora son las 16:26:28.


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