Ver Mensaje Individual
  #31
Antiguo 5 de diciembre de 2022, 12:42
Josber
Moderador Global
Activista del Foro: Activista del Foro - Issue reason: Por aportar manuales y enriquecer  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos 
Última Actividad 20.09.2026 12:17
Posts Posts: 883
Likes enviados Enviados: 418
Likes recibidos Recibidos: 492

Hola @Socavi,

A ver si con éste ejemplo te aclaras más
Supón que tienes una hoja de cálculo como la que adjunto en la imagen, y quieres traspasar los datos a un fichero, que se llama en éste caso FICHERO.DAT, lo primero es que en tu Form, has de insertar con ExcelControl, que se llame CmExcel1, el código para traspasar los datos, que supongo que irá en un ButtomControl, (un botón), sería así:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  INPUT-OUTPUT    SECTION.
  3.  FILE-CONTROL.
  4.      SELECT OPTIONAL FICHERO
  5.             ASSIGN TO "FICHERO.DAT"
  6.             ORGANIZATION IS INDEXED
  7.             ACCESS MODE  IS DYNAMIC
  8.             FILE STATUS  IS STFIC
  9.             LOCK         IS AUTOMATIC WITH LOCK ON RECORD.
  10.  DATA            DIVISION.
  11.  FILE          SECTION.
  12.  FD  FICHERO IS GLOBAL
  13.      LABEL RECORD IS STANDARD
  14.      DATA  RECORD IS REG_FIC.
  15.  01  REG_FIC.
  16.      03  FICCP          PIC 9(05).
  17.      03  FICPOB         PIC X(30).
  18.      03  FICPRO         PIC X(20).
  19.      03  FICPAI         PIC X(20).
  20.  WORKING-STORAGE SECTION.
  21.  01  ESTILO         PIC S9(5) COMP-5.
  22.  01  RETORNO            PIC S9(5) COMP-5.
  23.  01  LIN                PIC  9(9) COMP-5.
  24.  01  STFIC          PIC XX.
  25.  PROCEDURE       DIVISION.
  26. *
  27.  INICIO.
  28.      OPEN I-O FICHERO.
  29.      INITIALIZE REG_FIC.
  30.  
  31.      INVOKE CmExcel1 "OpenBook"    *> <------ Abrimos la Hoja de cálculo
  32.             USING "Ruta_y_Nombre_Mi_Fichero-Excel.xls"
  33.                   1                *> <------ Aquí el número de hoja que queremos abrir
  34.             RETURNING RETORNO
  35.      END-INVOKE.
  36.  
  37.  
  38.      IF RETORNO NOT = 0
  39.         ADD POW-DMICONERROR POW-DMOK GIVING ESTILO
  40.         INVOKE POW-SELF "DisplayMessage"
  41.                USING "*Error: No exsite la hoja de cálculo ..."
  42.                      "ERROR"
  43.                      ESTILO
  44.         END-INVOKE
  45.         CLOSE FICHERO
  46.         INVOKE POW-SELF "CloseForm"
  47.         EXIT PROGRAM
  48.      END-IF.
  49.  
  50.      MOVE 2 TO LIN.                *> <------ Empezamos en la linea 2, porque suponemos que la 1 contiene el encabezado de las celdas
  51.      PERFORM WITH NO LIMIT
  52.  
  53. *
  54. * Como en PWV, no hay ninguna función, que nos indique el final de los datos en una hoja de cálculo
  55. * vamos a suponer que si la celda nnn:1, vale 0 o está en blanco, hemos llegado al final de la hoja
  56. *
  57. * y empezamos a traspasar los datos, leemos las celdas, y las pasamos directamente a los campos del
  58. * fichero que a continuación grabaremos
  59. *
  60.              MOVE "Numeric" (LIN 1) OF CmExcel1 TO FICCP
  61.  
  62.              IF FICCP = 0
  63.                 EXIT PERFORM
  64.              END-IF
  65.  
  66.              MOVE "Text"    (LIN 2) OF CmExcel1 TO FICPOB
  67.              MOVE "Text"    (LIN 3) OF CmExcel1 TO FICPRO
  68.              MOVE "Text"    (LIN 4) OF CmExcel1 TO FICPAI
  69.  
  70.              WRITE REG_FIC         *> <----- Grabamos los datos en el fichero
  71.                    INVALID KEY     *> <----- Si da error, los regrabamos, por si acaso
  72.                            REWRITE REG_FIC
  73.                                    INVALID KEY     *> Si da error, informamos del número de FILE-STATUS
  74.                                            ADD POW-DMICONERROR POW-DMOK GIVING ESTILO
  75.                                            INVOKE POW-SELF "DisplayMessage"
  76.                                                   USING "Error al Grabar ..."
  77.                                                         STFIC
  78.                                                         ESTILO
  79.                                            END-INVOKE
  80.                            END-REWRITE
  81.              END-WRITE
  82.  
  83.              ADD 1 TO LIN
  84.  
  85.      END-PERFORM.
  86.  
  87.      ADD POW-DMICONINFORMATION POW-DMOK GIVING ESTILO.
  88.  
  89.      INVOKE POW-SELF "DisplayMessage"
  90.             USING "Fin del traspaso ..."
  91.                   " ¡ Atención ... !"
  92.                   ESTILO
  93.      END-INVOKE.
  94.  
  95.      INVOKE CmExcel1 "CloseBook".
  96.      CLOSE FICHERO.

En éste caso, cuando llegue a la línea 17 de la hoja de cálculo, el programa terminará.

Un saludo.-
Imágenes Adjuntas
 
Josber is offline   Responder Con Cita