Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Volcar url de Delphi a Excel (https://www.clubdelphi.com/foros/showthread.php?t=84969)

fjcg02 07-01-2014 14:30:37

Volcar url de Delphi a Excel
 
Hola a todos,
estoy volcando datos de delphi a Excel.

Para ello, en un programa delphi, tengo un boton que llama a una función que hace todo perfectamente menos... una formula que crea un hipervinculo.

Tengo un campo que me monta a la perfección la llamada

=HIPERVINCULO("http://servidor.dominio.es:80/CAisd/web.exe?OP=SEARCH+FACTORY=cr+SKIPLIST=1+QBE.EQ.id=7752545";"984368")

Cuando este campo lo paso a excel, me da un error de conexión.

El problema está en el igual. Si este valor lo copio y lo pego a mano, excel hace algo con él, y me funciona correctamente.

la llamada a excel es así:

Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
  excel,WrkB :OleVariant; Salida: string;
begin
  try
    excel:= ComObj.CreateOleObject('Excel.Application');
  except
    ShowMessage('Excel no se pudo iniciar.');
    exit;
  end;
  excel.Visible:=true;

  WrkB := Excel.Workbooks.Add ;

  EjecutarConsulta;
  Salida:= AExcel( 1,1,1,excel,WrkB, ADOQuery1);

function TForm1.AExcel( Hoja,Fila,Columna: Integer; excel,WrkB :OleVariant; Data:TADOQuery): string;
var
  WrkS :OleVariant;
  Campo:Integer;
  Salida: string;
begin
  Data:=ADOQuery1;
  if not Data.Active then
  begin
    messageDlg('La consulta debe ejecutarse previamente',
              mtConfirmation, [mbOK],0);
    Exit;
  end;
  WrkS := WrkB.Worksheets.Item[Hoja];

  Data.First;
  Salida:= FormatDateTime('[hh:mm:ss]',now)+ ' Comienzo Proceso... ';

    for Campo := 0 to Data.FieldCount-1 do
    begin
      WrkS.Cells[fila,Campo+Columna].Value:=Data.fields[Campo].FieldName;
    end;

  try
    while not(Data.eof) do
    begin
      for Campo := 0 to Data.FieldCount-1 do
      begin
        if not Data.Fields[Campo].IsNull then
          WrkS.Cells[fila,Campo+Columna].Value:=trim(Data.Fields[Campo].AsString);
      end;
      Data.Next;
      fila:= fila + 1;
    end;
  Except
     ShowMessage('Atención, se produjo un error en la transmisión.');
  end;

end;

fjcg02 09-01-2014 14:37:44

Hola,
el error que me da es "OLE error 800A03EC"

Es un error conocido, pero no sé cómo salvarlo. He intentado copiar el valor al portapapeles y desde allí copiarlo. Me funciona, a excepción de que no sé cómo colocarme en la celda correspondiente antes de pegar el dato.

Agradecería cualquier ayuda.

Gracias y un saludo

fjcg02 20-01-2014 10:01:54

Hola a todos,
me respondo a mi mismo, por si a alguien le ocurre lo mismo.

Cuando se exporta una fórmula, como es mi caso, no se puede utilizar la propiedad Cells[].Value, sino la propiedad Range[].Formula.

Código Delphi [-]
WrkS.Cells[fila,Campo+Columna].Value:= Dato;

WrkS.Range[strRango,strRango].Formula:=dato;

La particularidad es que cuando se utiliza Range, hay que utilizar "A1" y cuando se utiliza Cells debe poner el nº de fila y columna.

Código Delphi [-]
WrkS.Cells[1,1].Value:= Dato;

WrkS.Range['A1','A1'].Formula:=dato;
Espero que sea de utilidad.

Un saludo


La franja horaria es GMT +2. Ahora son las 06:47:47.

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