Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   crear libro excel desde delphi en windows vista (https://www.clubdelphi.com/foros/showthread.php?t=58832)

santiago14 02-08-2008 17:30:26

crear libro excel desde delphi en windows vista
 
Buenas, tengo un problema, quiero crear un libro excel desde delphi pero en windows vista no me lo permite. El error que me da es algo así:

"No se pudo guardar el archivo solicitado C:\ED966500, las causas podrían ser:
La ruta no existe,
No tiene permisos
...... "

Lo extraño es que en XP funciona sin problemas. Bueno, pongo el código de lo que estoy diciendo para ver si alguien me ayuda.

Muchas gracias.

Código Delphi [-]
procedure ExportarExcel_PlanillaDiaria(planillaDiaria:TPlanillaDiaria;
  cantHojasExcel:integer = 2; nombreArchivo:string = 'c:\PlanillaDiaria');
{En este caso se crea el libro y dos hojas}
var
  Excel: variant; // Aplicación Excel
  Libro: variant; // Libro de trabajo
  HojaBuenos, HojaMalos: variant; // Hoja de cálculo
  filaCliente, saltoFilaCliente: integer;
  i:integer;
  nro:integer;
begin
  with planillaDiaria do
  begin
    try
      Excel := CreateOleObject('Excel.Application');
      Excel.visible := False;
      Excel.DisplayAlerts:= False;
    //Creamos un nuevo libro de trabajo
      Excel.SheetsInNewWorkbook := cantHojasExcel;
      Libro := Excel.WorkBooks.Add;

    //Le ponemos nombres a las hojas
      Excel.WorkBooks[1].WorkSheets[1].Name := 'Buenos';
      Excel.WorkBooks[1].WorkSheets[2].Name := 'Malos';

      HojaBuenos:=Excel.WorkBooks[1].WorkSheets['Buenos'];
      HojaMalos:=Excel.WorkBooks[1].WorkSheets['Malos'];

    //Algo de Cartelería
      HojaBuenos.cells[1,3]:='Planilla Semanal de Cobros';  HojaMalos.cells[1,3]:='Planilla Semanal de Cobros';
      HojaBuenos.cells[2,3]:='Cobrador:';                   HojaMalos.cells[2,3]:='Cobrador:';
      HojaBuenos.cells[3,3]:='Zona:';                       HojaMalos.cells[3,3]:='Zona:';
      HojaBuenos.cells[2,4]:=nombreCobrador;                HojaMalos.cells[2,4]:=nombreCobrador;
      HojaBuenos.cells[3,4]:=zonaCobrador;                  HojaMalos.cells[3,4]:=zonaCobrador;

      HojaBuenos.cells[5,1]:='CLIENTE';                     HojaMalos.cells[5,1]:='CLIENTE';
      HojaBuenos.cells[5,3]:='Lunes';                       HojaMalos.cells[5,3]:='Lunes';
      HojaBuenos.cells[5,4]:='Martes';                      HojaMalos.cells[5,4]:='Martes';
      HojaBuenos.cells[5,5]:='Miércoles';                   HojaMalos.cells[5,5]:='Miércoles';
      HojaBuenos.cells[5,6]:='Jueves';                      HojaMalos.cells[5,6]:='Jueves';
      HojaBuenos.cells[5,7]:='Viernes';                     HojaMalos.cells[5,7]:='Viernes';
      HojaBuenos.cells[5,8]:='Sábado';                      HojaMalos.cells[5,8]:='Sábado';

      HojaBuenos.cells[6,3]:=#39 + dateToStr(fechaLunes);   HojaMalos.cells[6,3]:=#39 + dateToStr(fechaLunes);
      HojaBuenos.cells[6,4]:=#39 + dateToStr(fechaMartes);  HojaMalos.cells[6,4]:=#39 + dateToStr(fechaMartes);
      HojaBuenos.cells[6,5]:=#39 + dateToStr(fechaMiercoles); HojaMalos.cells[6,5]:=#39 + dateToStr(fechaMiercoles);
      HojaBuenos.cells[6,6]:=#39 + dateToStr(fechaJueves);  HojaMalos.cells[6,6]:=#39 + dateToStr(fechaJueves);
      HojaBuenos.cells[6,7]:=#39 + dateToStr(fechaViernes); HojaMalos.cells[6,7]:=#39 + dateToStr(fechaViernes);
      HojaBuenos.cells[6,8]:=#39 + dateToStr(fechaSabado);  HojaMalos.cells[6,8]:=#39 + dateToStr(fechaSabado);

    //Iniciamos en cierta fila
      filaCliente:=7;
    //Indicamos de cuantas filas es el salto
      saltoFilaCliente:=6;
      try
      //Iniciamos el armado de la hoja de buenos
        for i:=0 to high(planillaDiaria.clientesBuenos) do
        begin
          HojaBuenos.Cells[filaCliente + 0, 1]:=clientesBuenos[i].nombre;

          HojaBuenos.Cells[filaCliente + 1, 1]:=clientesBuenos[i].domicilioCobro;

          HojaBuenos.Cells[filaCliente + 2, 1]:='Nro. Crédito:';
          HojaBuenos.Cells[filaCliente + 2, 2]:=clientesBuenos[i].nroCredito;

          HojaBuenos.Cells[filaCliente + 3, 1]:='Monto Cuota: $';
          HojaBuenos.Cells[filaCliente + 3, 2]:=clientesBuenos[i].montoCuota;

          HojaBuenos.Cells[filaCliente + 4, 1]:='Fecha Semanal:';
          if clientesBuenos[i].fechaSemanal > 0 then
            HojaBuenos.Cells[filaCliente + 4, 2]:=#39 + dateToStr(clientesBuenos[i].fechaSemanal);

          filaCliente:=filaCliente + saltoFilaCliente;
        end; //del for...
      finally
      //Iniciamos en cierta fila
        filaCliente:=7;
      //Iniciamos el armado de la hoja de buenos
        try
          for i:=0 to high(planillaDiaria.clientesMalos) do
          begin
            HojaMalos.Cells[filaCliente + 0, 1]:=clientesMalos[i].nombre;

            HojaMalos.Cells[filaCliente + 1, 1]:=clientesMalos[i].domicilioCobro;

            HojaMalos.Cells[filaCliente + 2, 1]:='Nro. Crédito:';
            HojaMalos.Cells[filaCliente + 2, 2]:=clientesMalos[i].nroCredito;

            HojaMalos.Cells[filaCliente + 3, 1]:='Monto Cuota: $';
            HojaMalos.Cells[filaCliente + 3, 2]:=clientesMalos[i].montoCuota;

            HojaMalos.Cells[filaCliente + 4, 1]:='Fecha Semanal:';
            if clientesMalos[i].fechaSemanal > 0 then
              HojaMalos.Cells[filaCliente + 4, 2]:=#39 + dateToStr(clientesMalos[i].fechaSemanal);

            filaCliente:=filaCliente + saltoFilaCliente;
          end; //del for...
        finally
          
        end; //del finally
      end; //del finally
    //Grabamos el archivo
      randomize;
      nro:=random(100000);
      while FileExists(nombreArchivo + '_' + intToStr(nro) + '.xls') do
      begin
        nro:=random(100000);
      end;
      nombreArchivo:=nombreArchivo + '_' + intToStr(nro);
      Libro.saveAs(nombreArchivo);
      Excel.quit;
      Application.MessageBox(pchar('Exportación del Planilla semanal a Excel exitosa.'
          + #13#10 + 'Ubicación: ' + nombreArchivo + '.xls'),'Exportación a Excel',
          mb_Ok + MB_ICONINFORMATION);
    except
      on e:exception do
    begin
        excel.quit;
        Application.MessageBox(pchar('¡Sin exportación!' + #13#10 +
          'Mensaje: ' + e.message),'Exportación a Excel' ,mb_OK + mb_IconError);
    end;
    end; //del try
  end //del with
end;

coso 02-08-2008 18:45:12

Hola,

probablemente es por los permisos. No conozco windows vista, pero deberias crear el archivo en una carpeta compartida y publica.

santiago14 02-08-2008 19:39:44

windows vista
 
¿Hay alguna manera de manipular esos permisos?
Sería gratificante poder guardar la exportación en un archivo excel en la unidad C:\ cuanto menos. En realidad me conformaría que se pudiera guardar en cualquier lado.

Gracias.

coso 02-08-2008 22:00:25

puedes probar una carpeta dentro de la carpeta de tu programa: si puede ejecutarlo, entonces deberia poder escribir en ella. Tambien puedes probar de encontrar los documentos del usuario. Mira por aqui el foro, que seguramente encuentras como acceder a ellas.

Luis F. Orjuela 03-08-2008 18:50:25

Crear libro en EXCEL Windows VISTA
 
Hola SANTIAGO.

Tu problema está en tu variable:
nombreArchivo:string = 'c:\PlanillaDiaria';
pues en Windows Vista no se puede grabar directamente en la raíz, es decir, en "c:\", para efecto de pruebas créate una carpete por ejemplo:
"c:\mis archivos excel"
y cambia tu variable por:
nombreArchivo:string = 'c:\mis archivos excel\PlanillaDiaria';

y muy pero muy probablemente te funcionará.

Cordialmente

LUIS FERNANDO ORJUELA
BOGOTA COLOMBIA

"Tómate un café, yo invito..."


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