Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Convertir *.xls a *.dbf Con UHojaCalc.pas (https://www.clubdelphi.com/foros/showthread.php?t=88909)

gdlrinfo 24-08-2015 22:07:52

Convertir *.xls a *.dbf Con UHojaCalc.pas
 
Hola amigos desde ya muchas gracias a quienes se toman el tiempo el leer mi post, en primer lugar he encontrado esta pequeña hoja que hace que podamos hacer casi todas las funciones de Excel pero en OppenOfice dejo el link para que puedan mirarla ---> https://searchcode.com/codesearch/view/1112758/ en si la mayoría de las funciones andan muy bien pero yo necesito abrir una hoja en XLS y pasarla a DBF lo intente hacer con el siguiente código:
Código Delphi [-]
 
  Opendialog.Execute() ;
  HCalc:= THojaCalc.create(OpenDialog.FileName, true);
  HCalc.FileName:= 'C:\PADRON.XLS';
  if HCalc.IsActiveSheetProtected then
    ShowMessage('2nd sheet of name "'+HCalc.ActiveSheetName+'" IS protected');
  HCalc.SaveDocAs('C:\Padron.dbf');
  HCalc.Free;

Pero al guardarlo me da un error de tipo float si alguien se le ocurre alguna idea estaría agradecido atte. Gonzalo.

Casimiro Notevi 24-08-2015 22:42:39

Cita:

Empezado por gdlrinfo (Mensaje 495824)
Pero al guardarlo me da un error de tipo float

Pues copia exactamente el mensaje de error.

gdlrinfo 25-08-2015 00:47:05

Buenasss
 
Cita:

Empezado por Casimiro Notevi (Mensaje 495825)
Pues copia exactamente el mensaje de error.

Discúlpame el error es '14.0' is not a valid floating point value si lo hago con el open office sin pasar por Delphi lo hace a la perfección! Muchas gracias !!!

Casimiro Notevi 25-08-2015 01:01:01

Pueden ser varias causas, si hicieras un "copia->pega" sería más fácil ayudarte.
En principio, mira si usas el punto o la coma para los decimales.
También deberías mirar si has pasado el valor como texto en lugar de como número, tendrá una comilla simple delante: ej.: '14.0

gdlrinfo 25-08-2015 01:08:32

Hola
 
Casimiro Como estas mira puedo hacer copia y pega pero el tema es que un proceso existente muy extenso no lo invente yo es este mismo https://searchcode.com/codesearch/view/1112758/ puse el enlace para no copiarlo todo acá el error de Float nose a que se debe porque en verdad lo que esta haciendo es abrir un xls con el open office y guardarlo como DBF nada mas.- lo que haría en programa seria esto como dije antes es una función existente ....

Código Delphi [-]
FUNCTION THojaCalc.SaveDocAs (strName: string; bAsExcel97: boolean = false): boolean;

{ Function added by Massimiliano Gozzi on V0.92 }
{ AsEXcel97 taken form V0.93 by Rômulo Silva Ramos }
{ Saving as .xls on Excel 2000/2003 trick by Malte Tüllmann on V1.01 }

  VAR
    vOoParams: variant;
    exVersion: Extended;
    saveThousandSeparator, saveDecimalSeparator: char;


  BEGIN
    result := false;
    IF DocLoaded
    THEN
      BEGIN
        IF IsExcel THEN
          BEGIN
          {$IFDEF COMPILER_7_UP}
            exVersion := StrToFloat(m_vPrograma.Application.Version, m_AmericanFormat);

          {$ELSE COMPILER_7_UP}
            saveThousandSeparator := SysUtils.ThousandSeparator;
            saveDecimalSeparator := SysUtils.DecimalSeparator;
            SysUtils.ThousandSeparator := ',';
            SysUtils.DecimalSeparator := '.';
            exVersion := StrToFloat(m_vPrograma.Application.Version);
            SysUtils.ThousandSeparator := saveThousandSeparator;
            SysUtils.DecimalSeparator := saveDecimalSeparator;

          {$ENDIF COMPILER_7_UP}
            IF (exVersion < 12)
            THEN //
            //Before Excel 2007 this was the method to force SaveAs Excel97 .xls
            //by Malte Tüllmann on V1.01
              m_vDocument.Saveas(strName, - 4143, EmptyParam, EmptyParam, EmptyParam, EmptyParam)
            ELSE //
            // From Excel 2003 this is the way to force .xls file format (excel8)
            // for back compatibility with older excel version and OO.
            //
            // 51 = xlOpenXMLWorkbook (without macro's in 2007-2010, xlsx)
            // 52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007-2010, xlsm)
            // 50 = xlExcel12 (Excel Binary Workbook in 2007-2010 with or without macro's, xlsb)
            // 56 = xlExcel8 (97-2003 format in Excel 2007-2010, xls)
            // More on this here: http://www.rondebruin.nl/saveas.htm
              m_vDocument.Saveas(strName, 56);
            m_strFileName := strName;
            result := true;
          END {IF};
        IF IsOpenOffice THEN
          BEGIN //
          //I may need 1 or 2 params...
            IF bAsExcel97
            THEN
              vOoParams := VarArrayCreate([0, 1], varVariant)
            ELSE
              vOoParams := VarArrayCreate([0, 0], varVariant); //
          //First one for prompting on overwrite (good idea!)
            vOoParams[0] := ooCreateValue('Overwrite', false); //
          //Optionally tell OpenOffie to use Excel97 .xls format
            IF bAsExcel97 THEN
              vOoParams[1] := ooCreateValue('FilterName', 'MS Excel 97'); //
          //Do the save!
            m_vDocument.StoreAsUrl(FileName2URL(strName), vOoParams);
            m_strFileName := strName;
            result := true;
          END {IF};
      END {IF};
  END {THojaCalc.SaveDocAs};

Casimiro Notevi 25-08-2015 10:39:32

Cita:

Empezado por gdlrinfo (Mensaje 495829)
Casimiro Como estas mira puedo hacer copia y pega pero el tema es que un proceso existente muy extenso no lo invente yo es este mismo https://searchcode.com/codesearch/view/1112758/ puse el enlace para no copiarlo todo acá el error de Float nose a que se debe porque en verdad lo que esta haciendo es abrir un xls con el open office y guardarlo como DBF nada mas.- lo que haría en programa seria esto como dije antes es una función existente ....

Pues lo que te he dicho antes, tienes un numérico que lleva un carácter no númerico, por ejemplo lo que he puesto antes: '14.0 (Sobra la comilla del principio)
No podemos hacer mucho si no tenemos los datos que pasas, revisa esos datos que estén correctos.

gdlrinfo 27-08-2015 00:31:04

Buenas nuevamente
 
Buenas como estas ? Mira ahí quite la única columna numérica que tenia y tampoco lo hace no solo tira ese error sino que al quitar la Columna numérica tira un error que dice insuficiente memoria para realizar la tarea solo son 200 registros, en todo caso por ahí ustedes conozcan otro método para hacerlo osea pasar el xls a dbf desde ya muchas gracias !!!

Casimiro Notevi 27-08-2015 00:40:00

El problema es que tendríamos que tener un ejemplo real del fichero y demás, para probar.

gdlrinfo 27-08-2015 00:46:31

---
 
Es un fichero XLS convencional por ejemplo:

Nombre Apellido Telefono dirección
Gonzalo Martínez 024877878 santa fe 2015
Marcos Alvarez 48484897 Laprida 6000

Asi sucesivamente no hay nada raro en el fichero ! si me dices como lo envio pero es un fichero común y corriente.-

Atte. Gonzalo

gdlrinfo 27-08-2015 01:17:27

Casimiro Notevi
 
Otra cosa que estaría bueno si conoces algún componente que se pueda trabajar con xls y dbf que sea free y funcione en Delphi Xe6 yo he visto varios pero son pagos :S

Casimiro Notevi 27-08-2015 01:17:49

Si quieres, comprime en un zip el proyecto (sin el ejecutable, para que ocupe poco) y adjúntalo aquí.

Casimiro Notevi 27-08-2015 01:21:41

Y pregunto, ¿por qué quieres pasarlo a dbf?, algo tan obsoleto.

gdlrinfo 27-08-2015 01:32:11

Cita:

Empezado por Casimiro Notevi (Mensaje 495895)
Y pregunto, ¿por qué quieres pasarlo a dbf?, algo tan obsoleto.

Veras en mi trabajo recibimos archivos que están en ese formato y están encaprichados en no separarse del mismo ya que muchas empresas utilizan los datos en dbf si por mi fuera no lo usaría mas jajaja pero no es tan fácil no depende de mi.
Mañana te lo comprimo y lo envió gracias por tu atención!

gdlrinfo 27-08-2015 20:04:34

Subo archivos
 
Hola Casimiro Notevi aquí --->https://www.dropbox.com/s/himspsxsxj...rueba.zip?dl=0 subí el pequeño programa que debería convertir cualquier Excel a Dbf saludos y gracias por tu atención.-

Casimiro Notevi 27-08-2015 20:35:54

¿Una hoja de cálculo cualquiera?
¿Qué programa y versión?
Cuando estés contestando, en la parte de abajo tienes opciones para adjuntar archivos.

gdlrinfo 27-08-2015 21:19:35

Cita:

Empezado por Casimiro Notevi (Mensaje 495938)
¿Una hoja de cálculo cualquiera?
¿Qué programa y versión?
Cuando estés contestando, en la parte de abajo tienes opciones para adjuntar archivos.

Como estas? no me di cuenta que lo podía subir por acá con respecto a los XLS vienen en Formato Excel 2007 y el open office que uso es el 4.1.1 usamos el open office porque es el único que permite guardar en DBF ya que en mi trabajo solo hay office 2010 en adelante lo cual no tienen la opción de guardar el DBF cualquier cosita aquí estoy! !!! y gracias nuevamente

Casimiro Notevi 27-08-2015 23:10:14

No puedo compilarlo, ¿qué versión de delphi es?

ecfisa 28-08-2015 04:50:07

Hola gdlrinfo.

Tampoco puedo compilarlo:
Cita:

[Fatal Error] OppenOffice.pas(7): File not found: 'UHojaCalc.dcu'
[Fatal Error] OpenOffice.dpr(6): Could not compile used unit 'OppenOffice.pas'
Y, una vez eliminadas las referencias:
Cita:

[Error] OppenOffice.pas(29): Undeclared identifier: 'THojaCalc'
[Error] OppenOffice.pas(35): Missing operator or semicolon
[Error] OppenOffice.pas(35): Incompatible types: 'TComponent' and 'TFileName'
[Error] OppenOffice.pas(40): 'THEN' expected but identifier 'IsActiveSheetProtected' found
[Error] OppenOffice.pas(53): Statement expected but end of file found
Saludos :)

Casimiro Notevi 28-08-2015 10:08:50

Me da que pensar, si no exporta bien o simplemente no funciona, ni compila :D

gdlrinfo 28-08-2015 22:27:50

Buenas
 
Chicos compila a la perfección yo uso el Delphi xe6 nose porque no los deja :S y tengo instalado el open Office 4.1.1


La franja horaria es GMT +2. Ahora son las 18:39:24.

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