dynbrwexportexcel.i 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. DEF VAR hBuffer AS HANDLE NO-UNDO.
  2. DEF VAR hQuery AS HANDLE NO-UNDO.
  3. DEF VAR cName AS CHAR NO-UNDO.
  4. DEF VAR cWhere AS CHAR NO-UNDO.
  5. DEF VAR cLabel AS CHAR NO-UNDO.
  6. DEF VAR cString AS CHAR NO-UNDO.
  7. DEF VAR ij AS INT NO-UNDO.
  8. DEF VAR iRet AS INT NO-UNDO.
  9. DEF VAR cDelim AS CHAR NO-UNDO INIT '£'.
  10. DO WITH FRAME {&FRAME-NAME}:
  11. hQuery = {&BROWSE-NAME}:QUERY.
  12. hBuffer = hQuery:GET-BUFFER-HANDLE(1).
  13. IF NOT VALID-HANDLE ( hBuffer ) THEN RETURN.
  14. cName = SESSION:TEMP-DIR
  15. + ENTRY(1, THIS-PROCEDURE:FILE-NAME, '.')
  16. + '.csv'.
  17. cWhere = SUBSTITUTE('FOR EACH &1 NO-LOCK', hBuffer:NAME ) NO-ERROR.
  18. hQuery:QUERY-PREPARE(cWhere).
  19. hQuery:QUERY-OPEN().
  20. OUTPUT TO VALUE(cName).
  21. SESSION:SET-WAIT-STATE('GENERAL').
  22. cString = ''.
  23. DO ij = 1 TO hBuffer:NUM-FIELDS:
  24. IF hBuffer:BUFFER-FIELD(ij):NAME BEGINS 'row' THEN NEXT.
  25. FIND FIRST tBrowser NO-LOCK
  26. WHERE tBrowser.Feld = hBuffer:BUFFER-FIELD(ij):NAME
  27. AND tBrowser.fVisible = TRUE NO-ERROR.
  28. IF NOT AVAILABLE tBrowser THEN NEXT.
  29. cLabel = hBuffer:BUFFER-FIELD(ij):LABEL.
  30. IF cLabel = ? OR
  31. cLabel = '' THEN cLabel = hBuffer:BUFFER-FIELD(ij):NAME.
  32. cString = cString + cDelim + cLabel.
  33. END.
  34. IF cString <> '' THEN cString = SUBSTRING(cString,02).
  35. cString = REPLACE(cString, ';', ':').
  36. cString = REPLACE(cString, cDelim, ';').
  37. PUT CONTROL cString CHR(10).
  38. hQuery:GET-FIRST(NO-LOCK).
  39. DO WHILE NOT hQuery:QUERY-OFF-END:
  40. cString = ''.
  41. DO ij = 1 TO hBuffer:NUM-FIELDS:
  42. IF hBuffer:BUFFER-FIELD(ij):NAME BEGINS 'row' THEN NEXT.
  43. FIND FIRST tBrowser NO-LOCK
  44. WHERE tBrowser.Feld = hBuffer:BUFFER-FIELD(ij):NAME
  45. AND tBrowser.fVisible = TRUE NO-ERROR.
  46. IF NOT AVAILABLE tBrowser THEN NEXT.
  47. cLabel = hBuffer:BUFFER-FIELD(ij):BUFFER-VALUE(0).
  48. IF cLabel = ? THEN cLabel = ''.
  49. IF hBuffer:BUFFER-FIELD(ij):DATA-TYPE BEGINS 'CHAR' THEN DO:
  50. cLabel = REPLACE(cLabel, CHR(10), ' ').
  51. END.
  52. cString = cString + cDelim + cLabel.
  53. END.
  54. IF cString <> '' THEN cString = SUBSTRING(cString,02).
  55. cString = REPLACE(cString, ';', ':').
  56. cString = REPLACE(cString, cDelim, ';').
  57. PUT CONTROL cString CHR(10).
  58. hQuery:GET-NEXT(NO-LOCK).
  59. END.
  60. OUTPUT CLOSE.
  61. hQuery:QUERY-CLOSE().
  62. hQuery:QUERY-OPEN().
  63. SESSION:SET-WAIT-STATE('').
  64. END.
  65. RUN ShellExecuteA ( INPUT 0,
  66. INPUT 'open',
  67. INPUT 'Excel.exe',
  68. INPUT cName,
  69. INPUT '',
  70. INPUT 1,
  71. OUTPUT iRet ).