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)

Caro 28-05-2008 15:15:28

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

Caro 28-05-2008 15:26:57

Cita:

Empezado por felipe88 (Mensaje 289371)
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 ;):p:D

Saluditos

felipe88 28-05-2008 15:30:03

Cita:

Empezado por Caro (Mensaje 289560)
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 ;):p:D

Saluditos

Gracias Caro, eso me tranquiliza mas...:):rolleyes::p;):D

Caro 28-05-2008 16:48:11

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

roman 28-05-2008 17:31:23

Cita:

Empezado por Caro (Mensaje 289596)
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

Caro 28-05-2008 18:19:42

Hola amiguito Roman, ya me funciona utilizando Cells como me indicas, muchísimas gracias ;). Lo que pasaba es que yo accedía a la celda, como esta en mi codígo casi al principio de este hilo.

Saluditos

axlrafael 29-05-2008 00:09:14

De nueva cuenta muchisisimas gracias Caro, no sabes como me has ayudado en todo este tiempo, te lo agradesco de corazón, ya te debo miles :D.

Sobre tu otro código, voy a checarlo, porque con el anterior me sirve mucho, de todas maneras lo tomare en cuenta.

Saludos y suerte a todos con sus proyectos. ;)

Tachiquin 17-06-2008 15:48:15

auxiliooooo.... yo tambien ando perdida, tengo que hacer un trabajo parecido,
 
tengo que abrir archivos de word y de excel y mostrar la informacion en un programa en delphi, tambien guardar datos en archivos de word y excel, pueden decirme con que componentes, como se manejan parametros, estoy en delphi 7

ledesmarc 15-07-2008 16:50:05

Excel ADO
 
Cita:

Empezado por roman (Mensaje 283063)
También puedes usar los componentes ADO. Aquí hay detalles de cómo usarlos para acceder a una hoja de Excel.

// Saludos

Roman muy buena tu info, pero tengo un problema cuando quiero importar desde el excel (usando Ado) lo hace bien cuando se trata de una columna que sean todos del mismo tipo para mi caso(son todos numeros) el tema es que cuando en la columna hay mesclados numeros y letras en una misma celda, la importacion se corta (osea importa hasta esa celda)y la verdad me he cansado de buscar pero no encuentro el porque.
Te agredecere cualquier sugerencia
Saludos.
Marcos

maxid 21-08-2008 17:28:11

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 OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database 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 OLEDB:Don'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

ledesmarc 22-08-2008 11:23:40

Muchas Gracias por la Data, ahora lo pruebo..

Saludos

Rancy 15-09-2008 11:00:18

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

Rancy 15-09-2008 11:31:03

Ok, ya suponía que estaba cometiendo un error muy básico :D

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.

jejo1984 09-01-2012 22:49:37

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

Casimiro Notevi 09-01-2012 23:10:31

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.


jejo1984 10-01-2012 12:51:04

Ok Casimiro ya esta dame una sugerencia pues en que estoy fallando estoy usando Lazarus IDE

Casimiro Notevi 10-01-2012 12:57:20

Mira si te sirve alguno de los enlaces de abajo de esta página, justo al final.

jejo1984 10-01-2012 13:06:29

Lo estoy trabajando en lazarus IDE - windows xp y solo aparece esos errores y la verdad no logro solucionarlo =(

Casimiro Notevi 10-01-2012 13:39:45

Cita:

no se encontro "??????x.xlsx" Comprube ortografia y verificar si la ubicación es correcta.
Puede que la ruta que le has indicado no sea tan correcta.

jejo1984 10-01-2012 13:51:31

La ruta es correcta la comprobe creo que el error marca por que le puse esto:
Código Delphi [-]
StrToInt(ExtractFileName(FileName))
Pero si quito StrToInt me marca lo siguiente:
Código Delphi [-]
Error: Incompatible types: got "AnsiString" expected "LongInt"


La franja horaria es GMT +2. Ahora son las 22:14:19.

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