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;
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 m_vDocument.Saveas(strName, - 4143, EmptyParam, EmptyParam, EmptyParam, EmptyParam)
ELSE m_vDocument.Saveas(strName, 56);
m_strFileName := strName;
result := true;
END ;
IF IsOpenOffice THEN
BEGIN IF bAsExcel97
THEN
vOoParams := VarArrayCreate([0, 1], varVariant)
ELSE
vOoParams := VarArrayCreate([0, 0], varVariant); vOoParams[0] := ooCreateValue('Overwrite', false); IF bAsExcel97 THEN
vOoParams[1] := ooCreateValue('FilterName', 'MS Excel 97'); m_vDocument.StoreAsUrl(FileName2URL(strName), vOoParams);
m_strFileName := strName;
result := true;
END ;
END ;
END ;