Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Abrir un archivo de texto con excel (https://www.clubdelphi.com/foros/showthread.php?t=75905)

Pitilingorri 26-09-2011 19:01:52

Abrir un archivo de texto con excel
 
Quiero abrir un fichero de texto con cierto formato en Excel. En VBA seria algo asi:

Cita:

Workbooks.OpenText Filename:= "C:\tmp\Prueba.TXT" , Origin:=xlWindows, StartRow:=16, DataType:=xlFixedWidth, FieldInfo:= Array(Array(0, 1), Array(7, 1), Array(31, 1), Array(43, 1), Array(53, 1), Array(67, 1))

Donde el parametro StartRow es la linea a partir de la cual se empieza a exportar el archivo de texto, y el campo FieldInfo indica la distribución de las columnas.

El código equivalente en Delphi que estoy usando el delphi es el siguiente:

Código Delphi [-]
Excel := createOleObject('Excel.Application'); 
Excel.WorkBooks.Opentext(odImportar.FileName,emptyparam,'18',emptyparam,'Array(Array(0, 1), Array(7, 1), Array(31, 1), Array(43, 1), Array(53, 1), Array(67, 1))'); 
Excel.Visible := True;


y me sale un mensaje de error que dice "Fallo en el método Opentext de la clase Workbooks".

Si en vez de introducir el código anterior meto este:

Código Delphi [-]
Excel := createOleObject('Excel.Application'); 
Excel.WorkBooks.Opentext(odImportar.FileName,emptyparam,'18',emptyparam); 
Excel.Visible := True;


no me da un mensaje de error (Aunque no me coloca el texto en las columnas que yo quiero), por lo que supongo que el error debe estar en el campo FieldInfo. ¿Hay alguna manera de meterlo correctamente?


Gracias de antemano por vuestra ayuda.

Pitilingorri 27-09-2011 10:29:57

Bueno, parece ser que finalmente encontre la solución. Seria esta:

Código Delphi [-]
Excel := createOleObject('Excel.Application');  
Excel.Workbooks.OpenText('c:\tmp\Prueba.txt'
        , Origin:=xlWindows
  , StartRow:=18
  , DataType:=xlFixedWidth
     , FieldInfo := ( VarArrayOf([VarArrayOf([0, 7])
    , VarArrayOf([7, 1])
    , VarArrayOf([31, 1])
    , VarArrayOf([53, 1])
    , VarArrayOf([67, 1])]) )); 
Excel.Visible := True;

Espero que le pueda servir a alguien cuando se encuentre con la misma duda :)

Pitilingorri 27-09-2011 11:09:40

Mi gozo en un pozo. Ahora parece que ha surgido otro problemilla. Al abrir el archivo me sale el siguiente mensaje:

Cita:

"Prueba.txt" está siendo modificado por "otro usuario" ¿Desea abrirlo con acceso de sólo lectura?
Realmente el problema no es grave, ya que el archivo se carga en el Excel, pero que aparezca esta pantalla resulta algo incomodo ¿Alguna idea?

Gracias de antemano por vuestra ayuda

newtron 27-09-2011 11:57:07

Hola.

A mi me ha pasado que haciendo pruebas se quedan sesiones abiertas con el fichero pillado, mira a ver si es ese el problema porque matando las sesiones o reiniciando el equipo debe de solucionarse.

Saludos

Pitilingorri 27-09-2011 12:24:04

Cita:

Empezado por newtron (Mensaje 413578)
Hola.

A mi me ha pasado que haciendo pruebas se quedan sesiones abiertas con el fichero pillado, mira a ver si es ese el problema porque matando las sesiones o reiniciando el equipo debe de solucionarse.

Saludos

Lo miraré de nuevo, pero no creo que esa eso ya que si que reinicié el equipo y me sigue dando ese problema. En cualquier caso, gracias por tu sugerencia :)

A la espera de una solución más optima y/o elegante, lo que he hecho es hacer una copia del fichero de texto:

Código Delphi [-]
CopyFile(PChar('c:\tmp\Prueba.txt'),PChar('d:\temporal.txt'),FALSE) then

Y después meter como parametro la copia del fichero:

Código Delphi [-]
Excel.Workbooks.OpenText('d:\temporal.txt'
    , Origin := xlWindows
        , StartRow := 16
        , DataType := xlFixedWidth
        , FieldInfo := ( VarArrayOf([VarArrayOf([0, 7])
            , VarArrayOf([7, 1])
                , VarArrayOf([31, 1])
                , VarArrayOf([53, 1])
                , VarArrayOf([67, 1])]) ));

La verdad es que no me hace demasiada gracia usar tan a la ligera ficheros temporales, pero por el momento parece que esta solución funciona.


La franja horaria es GMT +2. Ahora son las 05:50: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