PDA

Ver la Versión Completa : Problema con ExcelApplication.ActiveWorkbook.SaveAs


sitrico
16-09-2005, 23:20:12
Tengo el siguiente código:


Arch := StrDir(DirDest.Text)+NombreArchivo+'.XLS';
// ExcelApplication1.ActiveWorkbook.SaveAs(Arch,xlNormal, '', '', false, false,
// xlNochange,xlUserResolution,False,EmptyParam,EmptyParam,
// LCID);
ExcelApplication1.ActiveWorkbook.SaveAs(Arch,xlNormal, '', '', false, false,
xlNochange,xlUserResolution,False,EmptyParam,EmptyParam,
xlLocalFormat1,LCID);
If MostrarExcel.Checked Then
ExcelApplication1.Visible[0] := true
Else
ExcelApplication1.Quit;


Funcionaba perfectamente con los componentes de servers Office 2000 pero tuve que cambiarlos por los Office XP y a partir de ese momento no funcionó la línea del SaveAs (Incorporó un parámetro adicional (xlLocalFormat1 creo), antes funcionaba bien con la línea comentada)

Genera una excepción de Violación de Acceso en C88B5300

Alguien tiene un ejemplo con un ExcelApplication1.ActiveWorkbook.SaveAs que funcione.

PD. Si no uso el SaveAs el archivo se abre la hoja pero sin nombre (LibroX)

PD2. El comando SaveCopyAs funciona, pero al cerrar la hoja igual me pide el nombre.

PD3 El origen del problema es que con los componentes Office 2000 no abre el archivo con Office 2003 (Ole Error)

lgarcia
17-09-2005, 15:59:38
Hola:

Yo trabajo con Office 2003 y nunca he tenido ese problema te voy a enviar un codigo a ver si te sirve


procedure TFormMenu.Plantilla1Click(Sender: TObject);
var
Excel, Libro: Variant;
i: integer;
Nombre: string;
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Visible := False;
Excel.DisplayAlerts:= False;
Excel.WorkBooks.Add('C:\Archivos de programa\Tienda\Productos.xlt');
Excel.WorkBooks[1].WorkSheets[1].Name := 'Productos';
Libro := Excel.WorkBooks[1].WorkSheets['Productos'];
with Productos do
begin
Close;
Open;
end;
Productos.First;
i:= 2;
while not (Productos.Eof) do
begin
Libro.Cells [i,1] := ProductosCodTrasval.Value;
Libro.Cells [i,2] := ProductosDescripcionPLU.Value;
Libro.Cells [i,3] := ProductosPrecioCosto.Value;
Libro.Cells [i,4] := ProductosPrecioventa.Value;
Libro.Cells [i,5] := Productosum.Value;
Libro.Cells [i,6] := ProductosCategoria.Value;
inc(i);
Productos.Next;
end;
Libro.SaveAs('C:\Archivos de programa\Tienda\Listado transferencias');
ShowMessage(' El fichero Listado transferencias.xls ha sido creado exitosamente');
Excel.Quit;
end;


En el uses de la Unit incluyo Excel97, ComObj y siempre me trabaja bien en este caso yo utilizo una plantilla Excel (.xlt) para darle formato a las celdas y no tener que preocuparme por la programacion.

Saludos
Luis Garcia

_____________________________
La mejor manera de decir es hacer

sitrico
17-09-2005, 21:37:50
En el uses de la Unit incluyo Excel97, ComObj y siempre me trabaja bien

Por lo que dices aquí, creo que estas usando los componentes office 97, y mi problema es con los componentes Offixe XP

En realidad con los componentes office 2000 el programa me funcionaba perfectamente, pero me ocurría un error cuando el usuario tenía instalado ofiice 2003 (no había problemas si era 97, 2000 o 2002) por eso actualice a los componentes office XP.

Voy a tratar de anotar el error exacto que se genera para dar más luces.

Pero de cualquier manera voy a probar algo similar a ver que pasa