Ir al contenido


Foto

Problemas crear archivos Excel desde Delphi


  • Por favor identifícate para responder
7 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 05 enero 2017 - 01:50

Pues eso, tengo un procedimiento que funcionaba perfectamente, hasta ahora, antes me creaba el archivo en segundo, despúes ya no lo hace, luego no me crea el archivo lanzandome el siguiente error:

 

---------------------------
Debugger Exception Notification
---------------------------
Project SisAuto.exe raised exception class EOleException with message 'Cannot access 'Inventario.xlsx''.
---------------------------
Break   Continue   Help   
---------------------------

 

 

Este es el código:


delphi
  1. procedure TFInvGeneral.exportToExcel(FileName: string; AData: TFDQuery);
  2. var ExcelApp, Libro: Variant;
  3. Nombre : string;
  4. fila, i, j :integer;
  5. Columnas: TStringList;
  6. begin
  7.  
  8. Columnas := TStringList.Create;
  9. Columnas.Add('Código');
  10. Columnas.Add('Referencia');
  11. Columnas.Add('Insumo/Pieza');
  12. Columnas.Add('Marca');
  13. Columnas.Add('Existencia');
  14. Columnas.Add('Condición');
  15. Columnas.Add('Area');
  16. Columnas.Add('Costo');
  17.  
  18. svGuardar.Title := 'Exportando Reporte a Excel';
  19. svGuardar.DefaultExt := 'xlsx';
  20. svGuardar.FileName := FileName +'.xlsx';
  21.  
  22. svGuardar.Filter := 'Archivos Excel (*.xlsx)|*.xlsx';
  23. svGuardar.FilterIndex := 1;
  24.  
  25. try
  26. svGuardar.Execute;
  27. if (svGuardar.FileName <> '') then
  28. begin
  29.  
  30. //Deshabilitamos los controles
  31. AData.DisableControls;
  32.  
  33. ExcelApp := CreateOleObject('Excel.Application');
  34.  
  35. Nombre := 'Inventario';
  36. ExcelApp.DisplayAlerts := false;
  37.  
  38. //Comienzo a llenar las celdas
  39.  
  40. // crea el archivo
  41. ExcelApp.WorkBooks.Add();
  42.  
  43. // Nombre de la Hoja
  44. ExcelApp.WorkBooks[1].ActiveSheet.Name := Nombre;
  45.  
  46. // trabajo sobre la hoja
  47. Libro := ExcelApp.WorkBooks[1].ActiveSheet;
  48.  
  49. // Orientación de pagina
  50. Libro.PageSetup.Orientation := 1; // 1-vertical; 2-horiz
  51.  
  52. // Fila sobre la que esta por escribir
  53. fila := 1;
  54.  
  55. //Agregamos las columnas
  56. for i:= 0 to Columnas.count - 1 do
  57. begin
  58. Libro.Cells[fila,i+1] := Columnas.Strings[i];
  59. Libro.Cells[fila,i+1].Font.Bold := True;
  60. Libro.Cells[fila,i+1].font.Size := 12;
  61. Libro.Cells[fila,i+1].font.Color := clWhite;
  62. Libro.Cells[fila,i+1].Interior.Color := clGray ;
  63. Libro.Cells[fila,i+1].HorizontalAlignment := -4108; //Centralizamos
  64. end;
  65.  
  66. // Fila siguiente
  67. inc(fila);
  68.  
  69. AData.First;
  70. for i:= 1 to AData.RecordCount do
  71. begin
  72. for j:= 0 to Columnas.Count-1 do
  73. begin
  74.  
  75. case AData.Fields[J].DataType of
  76. ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numérico
  77. begin
  78. Libro.Cells[fila,j+1].NumberFormat := '0';
  79. Libro.Cells[fila, J +1] := AData.Fields[J].AsInteger;
  80. end;
  81.  
  82. ftBCD, ftFloat, ftCurrency: // Numérico con decimales
  83. begin
  84. Libro.Cells[fila,j+1].NumberFormat := '0.00';
  85. Libro.Cells[fila, J +1] := AData.Fields[J].AsFloat;
  86. end;
  87.  
  88. ftDateTime, ftDate, ftTime: // Fecha y Hora
  89. begin
  90. Libro.Cells[fila, J +1] := AData.Fields[J].AsDateTime;
  91. end;
  92.  
  93. else
  94. begin
  95. Libro.Cells[fila,j+1].NumberFormat := RPad('0', '0', Length(AData.Fields[J].AsString));
  96. Libro.Cells[fila,J+1]:= AData.Fields[J].AsString ;
  97. end;
  98. end;
  99.  
  100. end;
  101.  
  102. AData.Next;
  103. // Fila siguiente
  104. inc(fila);
  105.  
  106. // automatizar ancho de columnas
  107. Libro.Cells.Columns.AutoFit;
  108.  
  109. // Guarda y cierra el archivo
  110. Libro.SaveAs(FileName);
  111. ExcelApp.Visible := True;
  112.  
  113. end;
  114. end;
  115. except
  116. ExcelApp.Quit;
  117.  
  118. showmessage('No se pudo crear el Archivo Excel.');
  119. raise;
  120. end;
  121.  
  122. Columnas.Free;
  123. end;

Saludos..


  • 0

#2 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 05 enero 2017 - 03:22

El archivo tiene contraseña? 

Con que version de Excel esta creado el archivo? 

Tenes privilegios para acceder al archivo?

El archivo esta en uso por otro proceso?

 

Que pasa si creas un nuevo archivo de excel en blanco y lo intentas leer con tu procedimiento? 


  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 05 enero 2017 - 04:40

Pues se supone que crea un nuevo archivo y no que carga uno existente y guardar los datos ahí.


  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 enero 2017 - 09:51

Pues se supone que crea un nuevo archivo y no que carga uno existente y guardar los datos ahí.

 
Que tal bro, intenta con ésto a manera de prueba.
 

 

delphi
  1.       Libro.SaveAs(ExtractFilePath( Application.ExeName ) + FileName);

 

Saludos :)
  • 0

#5 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 05 enero 2017 - 10:13

En base a ese error, yo primero pensaría en problemas de permisos.

Conocer la línea en la que te arroja la excepción nos ayudaría a detectar el problema.

 

Eliseo, no creo que el problema esté en la ruta. Seguramente Fernando ya se asegura de pasar como parámetro una ruta válida.

 

En lo otro que podría llegar a pensar es que algo a cambiado de una versión a otra de Excel. ¿Por casualidad antes estaba instalado una versión diferente? Si bien Office tiene buena compatibilidad de una versión a otra, hay cosas que posiblemente no lo sean... con la llegada del formato "x" se han roto algunos moldes, no es lo mismo el xls que el xlsx.

¿No será cosa de Ole?

 

Si antes te estaba funcionando y ahora no, es fundamental determinar que ha cambiado en el medio.

 

Saludos,


  • 1

#6 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 05 enero 2017 - 11:33

Entendi cualquier cosa; crei que estabas leyendo un archivo y no generando uno. Lo unico que se me ocurre a simple vista es lo mismo que Marcelo. En que linea rompe?


Editado por Agustin Ortu, 05 enero 2017 - 11:33 .

  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 06 enero 2017 - 08:02

Sorpresivamente, hoy funcionó sin problemas, de todos modos hice algunos cambios, eliminé unas líneas y de acuerdo a la sugerencia de Eliseo lo cambié a:


delphi
  1. Libro.SaveAs( svGuardar.FileName );

Y no me ha vuelto a fallar, en caso de volver a tener problemas les comento.

 

Saludos.


  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 06 enero 2017 - 10:06

Os dejo por aquí mi código mejorado y más personalizado para quien le pueda servirle.

 

http://delphiaccess....ataset-a-excel/

 

Saludos.


  • 2




IP.Board spam blocked by CleanTalk.