Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con CreateOleObject (https://www.clubdelphi.com/foros/showthread.php?t=63433)

PaFernan99 13-02-2009 13:48:51

Problema con CreateOleObject
 
Hola Gente!
No he encontrado referencia en el foro sobre mi problema asi que me he animado a plantearlo, a pesar de que se habla mucho de esto...

Necesito, a partir de un archivo de texto separado por TAB, crear un archivo excel con el mismo nombre. He construido el siguiente método

Código Delphi [-]
procedure TConvertirAExcel.ProcesarTXT;
var Excel:variant;
begin

        try
          Excel := CreateOleObject('Excel.Application');
          Excel.workbooks.open(ExtractShortPathName(dirPath+'\list.txt'));
          Excel.workbooks.saveAs(ExtractShortPathName(dirPath+'\list.xls'));
          Excel.Quit;
        except
            inc(self.archivosSalteados);
            showmessage('No he podido crear el objeto OLE');

         end;


end;

Método que pertenece a un hilo que he creado para un proceso por lotes.
El problema es que al debuggear el método, se dispara la exception cuando intenta ejecutar la primera línea de código que sigue al try.
¿Cuál puede ser el inconveniente?

Caro 13-02-2009 14:49:02

Hola, indícanos el error completo que te esta saliendo.

Saluditos

PaFernan99 13-02-2009 15:50:13

Hola Caro!
El error principal consiste en que al intentar crear el objeto OLE no lo hace, sino que se dispara la excepción.
Luego, en algunos casos al cerra la ventana de la aplicación se generan dos mensajes de error:

1)

Exception EOSError in module greenTools.exe at 000E806
System error code: 1400
El identificador de la ventana no es válido

2)

Runtime error 216 at 0046DB04.

Muchas gracias!!

Neftali [Germán.Estévez] 13-02-2009 15:51:49

¿Tienes Excel Instalado? ¿Qué versión?
(como dice Caro) ¿Qué error da?

Segun esto, esa línea es correcta.
También puedes revisar este documento que hay sobre el tema en dn.codegear.

PaFernan99 13-02-2009 15:55:52

Perdon por enviar la informacion con cuentagotas...
Es excel 2003.
Lo raro es que tengo el mismo código(no exactamente 100%, pero parecido), en una aplicacon que lo que hace es levantar el txt y mostrarlo en un TStringgrid, y lo hace perfecto. La unica línea de diferencia es la de

Cita:

Excel.workbooks.saveAs(ExtractShortPathName(dirPath+'\list.xls'));
Saludos!

(editado)

Bueno, creo que la respuesta a mi pregunta es que el objeto que estoy tratando de crear va a ejecutarse dentro de un hilo. Saqué fuera del hilo el mismo código y funciona perfectamente.

Muchas gracias a los dos!!!

Caro 13-02-2009 16:48:18

Hola, como te ha dicho Neftali, el error no es al crear, acabo de hacer una prueba y justamente el error da en la línea que indicas del SaveAs, es este "Method saveAs not supported by automation object" , lo que creo que esta pasando es que tu estas abriendo directamente el archivo txt y lo quieres grabar como xls, que yo sepa el Open debes utilizarlo para abrir archivos xls y despues ir añadiendo en la celdas ExcelAplication.Workbook.Worksheets[1].Cells[1, 1] := valor y lo mismo paar crear uno nuevo tendrías que recorrer lo que tienes en tu archivo e ir añadiendo, yo nose si se pueda hacer así directo como lo estas haciendo.

Tienes otra opción para guardar tu archivo txt como xls, pruebalo.

Código Delphi [-]
var
 sl : TStringList;
begin
 slFile := TStringList.Create;
 slFile.LoadFromFile(dirPath+'\list.txt');
 slFile.SaveToFile(dirPath+'\list.xls');

Si tu separador es el Tab como dices, te lo va a poner en columnas diferentes.

Saluditos

PaFernan99 16-02-2009 11:38:39

Muchas gracias Caro!!
Ahora mismo lo estoy probando.
Gracias a todos!!!

PD:Sencillo y eficaz!!!
Muchas gracias Caro!


La franja horaria es GMT +2. Ahora son las 12:10:19.

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