Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-04-2004
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
Desconozco si es posible hacer esto utilizando ADO. A fin de cuentas un libro de Excel no es propiamente una base de datos cuyas tablas sean las hojas.

Prueba a ver si te sirve esto:

Código:
uses
  ComObj;

...

procedure HojasExcel(Archivo: String; Lista: TStrings);
var
  Excel: OleVariant;
  Libro: OleVariant;
  I: Integer;

begin
  Excel := CreateOleObject('Excel.Application');
  Libro := Excel.WorkBooks.Open(Archivo);

  try
    Lista.Clear;
    for I := 1 to Libro.Worksheets.Count do
      Lista.Add(Libro.Worksheets.Item[i].Name);
  finally
    Libro.Close;
  end;
end;
Al procedimiento le pasas el nombre del archivo de Excel y un objeto de tipo TStrings para recibir los nombres de las hojas, por ejemplo un ListBox:

Código:
HojasExcel('archivo.xls', ListBox.Items);
Este código me funciona bien con Excel 2000.

// Saludos
Responder Con Cita
  #2  
Antiguo 03-04-2004
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
Una observación:

En lugar de crear una instancia de Excel con CreateOleObject podrías utilizar una componente TExcelApplication de la paleta Servers. Así lo probé inicialmente y funciona. El incoveniente es que entonces debes llenar todos los parámetros del método Open que son muchísimos e irrelevantes para lo que se busca.

// Saludos
Responder Con Cita
  #3  
Antiguo 03-04-2004
atirado atirado is offline
Miembro
 
Registrado: mar 2004
Posts: 41
Poder: 0
atirado Va por buen camino
Muchas gracias, Román! Lo intentaré de inmediato y te dejo saber si me funcionó o no


Saludos desde México
Alejandro
Responder Con Cita
  #4  
Antiguo 03-04-2004
atirado atirado is offline
Miembro
 
Registrado: mar 2004
Posts: 41
Poder: 0
atirado Va por buen camino
Unhappy

Hola de nuevo, Román!

Pues no, no funcionó, fíjate. Lo intenté con ADO y con un TExcelApplication y nada.
Ni siquiera me acepta la propiedad Names, pues me dice que no existe, y eso lo hice cuando ya tenía el TExcelApplication, por lo que no se a qué se debe.
Mi código de todo el Unit quedó de la siguiente manera:
Código:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleServer, Excel2000, DB;
type
  TForm1 = class(TForm)
	DataSource1: TDataSource;
	Excel: TExcelApplication;
	cbxHojas: TComboBox;
	Button1: TButton;
	procedure Button1Click(Sender: TObject);
  private
	{ Private declarations }
  public
	{ Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
   Libro: _WORKBOOK;
   Hoja: _WORKSHEET;
   I : Integer;
begin
  Libro := Excel.Workbooks.Open('D:\Mis Documentos\atirado\Excel\nomina.xls',
false,false,
null,'',null,true,null,'',
true,null,null,false,0);
  For I:= 1 to Libro.Worksheets.Count do
	 cbxHojas.items.add(Libro.Worksheets.Item[i].Name);
  Hoja := Libro.Sheets[1] as _WORKSHEET;
  Excel.Visible[0] := true;
end;
end.
De cualquier manera gracias; creo que simplemente no se puede hacer eso en Delphi

Salu2 desde MX
Alejandro
Responder Con Cita
  #5  
Antiguo 04-04-2004
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 atirado
creo que simplemente no se puede hacer eso en Delphi
El código que te puse lo hace sin ningún problema de manera que tu observación es demasiado contundente y falsa.

Es posible que dependiendo de la versión de Excel, el nombre de algunas propiedades sea distinto y habrá que ajustarse a ello estudiando la ayuda de VB que incluye Office o bien consultando el SDK de Windows.

De cualquier manera, como no dices si probaste el procedimiento que te pasé ni en su caso, que errores te marcó, así como tampoco indicas la versión de Excel que usas, ni la versión de Delphi ni la versión de las componentes Office, es imposible en estos momentos tratar de dilucidar lo que pasa.

// Saludos
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


La franja horaria es GMT +2. Ahora son las 13:12:07.


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