Skip to main content

[archive] Cell manipulations in Excel

  • September 21, 2009
  • 29 replies
  • 1 view

Show first post

29 replies

[Migrated content. Thread originally posted on 07 July 2009]

From my ever hard working buddy Claudio. A lot of examples on how to manipulate cells in Excel.

       IDENTIFICATION               DIVISION.
       PROGRAM-ID.                  ExcelSimple.
      * Compile with one of the following commandlines,
      * accordingly with your Office version
      *
      * ccbl32 -ga -si 2003 -sx 2000 ExcelSimple.cbl
      * ccbl32 -ga -sx 2003 -si 2000 ExcelSimple.cbl
      *
      *           
       ENVIRONMENT DIVISION.
       CONFIGURATION                SECTION.
       SPECIAL-NAMES.
      *    COPY    "excel.def".                                          | 2003
      *    COPY    "excel-2000.def".                                     | 2000
           decimal-point is comma.
       DATA        DIVISION.
       WORKING-STORAGE              SECTION.
       77  olExcel                  HANDLE OF APPLICATION.
       77  olWrkBk                  HANDLE OF WORKBOOK.
       77  olWrkSh                  HANDLE OF WORKSHEET.
       77  olWrkShNEW               HANDLE OF WORKSHEET.   
       77  oRange                   HANDLE OF RANGE.     
       77  oFont                    HANDLE OF @Font. 
       77  oInterior                HANDLE OF Interior.
       77  MY-STRING                PIC X(80).
       77  ws-count                 PIC 9(5).
       77  H-VARIANT                USAGE HANDLE.
       77  RESULT-CODE              PIC S9.
       77  ws-date                  PIC X(10).
       77  WS-SEPARATOR             PIC X.

       PROCEDURE DIVISION.
       Main.
           CREATE  Application      OF Excel
                   HANDLE           IN olExcel.
      *This is for training purposes only. If you don't want to see
      *Excel, remove this line.
           MODIFY  olExcel          @Visible = 1.
           MODIFY  olExcel          Workbooks::Add()
                   GIVING           olWrkBk.
           INQUIRE olWrkBk          Worksheets::Item(1) IN
                   olWrkSh.
      *Set the value of a cell.
           MODIFY  olWrkSh          Range("A1")::Value = "Last Name".
      *Get the value of a cell.
           INQUIRE olWrkSh          Range("A1")::Value IN MY-STRING.
      *Force a recalculation of a sheet
      *    MODIFY  olWrkSh          Range("A1")::Calculate().

      * INIZIO ***********************************************************
      * FORMATTAZIONE CELLE   
      *
           MODIFY  olWrkSh      Range("C4")::Value = "A".
           MODIFY  olWrkSh      Range("D4")::Value = "B".
           MODIFY  olWrkSh      Range("C5")::Value = "Dream Theater".
           MODIFY  olWrkSh      Range("C6")::Value = "Blind Guardian".
           MODIFY  olWrkSh      Range("D5")::Value = "Heaven & Hell".
           MODIFY  olWrkSh      Range("D6")::Value = "Queensryche".

      *     Columns("C:D").Select
      *     Columns("C:D").EntireColumn.AutoFit
           MODIFY  olWrkSh      Range("C:D")::Columns()::Select().
           MODIFY  olWrkSh      Range("C:D")::EntireColumn()::AutoFit().
      *     Range("C5").Select
      *     Selection.Font.Bold = True
      *    MODIFY  olWrkSh      Range("C5")::Select()                             | this causes MAV
      *            GIVING       oRange.                                           | this causes MAV
      *    MODIFY  oRange       @Font::Bold = 1.                                  | this causes MAV

           INQUIRE olWrkSh      Range("C5")::Font
                   IN oFont.
           MODIFY  oFont        Bold = 1.   

      * alternative method for Bold     
           MODIFY  olWrkSh      Range("A1:B1")::Font()::Bold(1)

      *     Range("D5").Select
      *     Selection.Font.Italic = True
           INQUIRE olWrkSh      Range("D5")::Font
                   IN oFont.
           MODIFY  oFont        Italic = 1. 

      *     Range("D6").Select
      *     With Selection.Font
      *             .Color = -16776961
      *             .TintAndShade = 0
      *     End With   
           INQUIRE olWrkSh      Range("D6")::Font
                   IN oFont.
           MODIFY  oFont        Color = -16776961.   

      *     Range("C6").Select
      *     With Selection.Interior
      *             .Pattern = xlSolid
      *             .PatternColorIndex = xlAutomatic
      *             .Color = 65535
      *             .TintAndShade = 0
      *             .PatternTintAndShade = 0
      *         End With   
           INQUIRE olWrkSh      Range("C6")::Interior
                   IN           oInterior.       
           MODIFY  oInterior    Pattern = xlSolid
                                PatternColorIndex = xlAutomatic
                                Color = 65535.

      *     Columns("C:D").Select
      *     With Selection
      *             .HorizontalAlignment = xlCenter
      *             .VerticalAlignment = xlCenter
      *             .WrapText = False
      *             .Orientation = 0
      *             .AddIndent = False
      *             .IndentLevel = 0
      *             .ShrinkToFit = False
      *             .ReadingOrder = xlContext
      *             .MergeCells = False
      *     End With   
           MODIFY olWrkSh       
                       Range("C4:D6")::HorizontalAlignment = xlCenter
           MODIFY olWrkSh       
                       Range("C4:D6")::VerticalAlignment = xlCenter.
      *     With Selection.Borders(xlEdgeBottom)
      *         .LineStyle = xlContinuous
      *         .Weight = xlThin
      *         .ColorIndex = xlAutomatic
      *     End With
           MODIFY  olWrkSh      Range("C5:D6")::BorderAround(
                                   BY NAME LineStyle = xlContinuous
                                   BY NAME Weight = xlThin
                                   BY NAME ColorIndex = xlAutomatic
                                   )             

      * FINE *************************************************************



      * FORMATO NUMERO **************************************************
           MODIFY  olWrkSh      Range("A5")::Value = 12345,99.
           MODIFY  olWrkSh      Range("A5")::NumberFormat = "0,00".       

      *     MODIFY  olWrkSh      Range("A17")::NumberFormat = "General"
      *     MODIFY  olWrkSh      Rows(1)::NumberFormat = "hh:mm:ss"
      *     MODIFY  olWrkSh      Columns("C")::NumberFormat =
      *                          "$#,##0.00_);[Red]($#,##0.00)"


      * FORMATO DATA ****************************************************
      * set the value of a date into a cell
      *    objExcel.Cells(1,1).NumberFormat = "mm.dd.yyyy"
      *
      *    01 is the day, 02 is the month
      *
           MOVE "01/02/2003" TO ws-date.
           MODIFY olWrkSh Range("A2")::Value = ws-date.
           INQUIRE olWrkSh Range("A2")::NumberFormat IN ws-date.
           IF ws-date(1:2) = "gg"
              MOVE "01/02/2003" TO ws-date
           ELSE
              MOVE "02/01/2003" TO ws-date
           END-IF
           MODIFY olWrkSh Range("A2")::Value = ws-date.
           MODIFY olWrkSh Range("A2")::NumberFormat = "gg/MM/aaaa".

      * LARGHEZZA COLONNA ***********************************************
      * [URL]msdn.microsoft.com/.../URL]

           MODIFY olWrkSh        Range("F1")::ColumnWidth = 4
           MODIFY olWrkSh        Range("F1")::RowHeight = 30

      *   
      * END *************************************************************                   
      *   
      * INIZIO ***********************************************************
      * Aggiungi un foglio a destra
           MODIFY  olWrkBk          Worksheets::Add()
                   GIVING olWrkShNEW.

           INQUIRE olWrkBk          Worksheets::Count IN ws-count
           INQUIRE olWrkBk          Worksheets::Item(ws-count) IN
                   olWrkSh.
           MODIFY  olWrkShNEW       @Move(BY NAME After olWrkSh)           

      * FINE *************************************************************                   
      *
      * INIZIO ***********************************************************
      * Copia un foglio
      *
      *    Sheets("Sheet1").Select
      *    Sheets("Sheet1").Copy After:=Sheets(3)
           INQUIRE olWrkBk          Worksheets::Item(1) IN
                   olWrkSh.

           MODIFY  olWrkSh          @Copy(BY NAME After olWrkSh)

      * FINE *************************************************************                   
      *

      * INIZIO ***********************************************************
      * INQUIRE DEL SEGNO DI SEPARAZIONE DECIMALE
      *
      *    INQUIRE olWrkBk @Application::DecimalSeparator                | 2003
      *                     IN WS-SEPARATOR                              | 2003
      * FINE *************************************************************                   
      *

           DESTROY oFont.
           DESTROY olWrkSh.
           DESTROY olWrkShNEW.   

      *Enforce a close without save, or Excel will prompt you.
           MODIFY  olWrkBk          @Close(BY NAME SaveChanges 0).
           DESTROY olWrkBk.
           MODIFY  olExcel          Quit().
      *This next line is very important, otherwise Excel will stick in
      *memory.

           DESTROY olExcel.
           GOBACK.

hmm, i know safe array in delphi but in cobol?

[Migrated content. Thread originally posted on 07 July 2009]

From my ever hard working buddy Claudio. A lot of examples on how to manipulate cells in Excel.

       IDENTIFICATION               DIVISION.
       PROGRAM-ID.                  ExcelSimple.
      * Compile with one of the following commandlines,
      * accordingly with your Office version
      *
      * ccbl32 -ga -si 2003 -sx 2000 ExcelSimple.cbl
      * ccbl32 -ga -sx 2003 -si 2000 ExcelSimple.cbl
      *
      *           
       ENVIRONMENT DIVISION.
       CONFIGURATION                SECTION.
       SPECIAL-NAMES.
      *    COPY    "excel.def".                                          | 2003
      *    COPY    "excel-2000.def".                                     | 2000
           decimal-point is comma.
       DATA        DIVISION.
       WORKING-STORAGE              SECTION.
       77  olExcel                  HANDLE OF APPLICATION.
       77  olWrkBk                  HANDLE OF WORKBOOK.
       77  olWrkSh                  HANDLE OF WORKSHEET.
       77  olWrkShNEW               HANDLE OF WORKSHEET.   
       77  oRange                   HANDLE OF RANGE.     
       77  oFont                    HANDLE OF @Font. 
       77  oInterior                HANDLE OF Interior.
       77  MY-STRING                PIC X(80).
       77  ws-count                 PIC 9(5).
       77  H-VARIANT                USAGE HANDLE.
       77  RESULT-CODE              PIC S9.
       77  ws-date                  PIC X(10).
       77  WS-SEPARATOR             PIC X.

       PROCEDURE DIVISION.
       Main.
           CREATE  Application      OF Excel
                   HANDLE           IN olExcel.
      *This is for training purposes only. If you don't want to see
      *Excel, remove this line.
           MODIFY  olExcel          @Visible = 1.
           MODIFY  olExcel          Workbooks::Add()
                   GIVING           olWrkBk.
           INQUIRE olWrkBk          Worksheets::Item(1) IN
                   olWrkSh.
      *Set the value of a cell.
           MODIFY  olWrkSh          Range("A1")::Value = "Last Name".
      *Get the value of a cell.
           INQUIRE olWrkSh          Range("A1")::Value IN MY-STRING.
      *Force a recalculation of a sheet
      *    MODIFY  olWrkSh          Range("A1")::Calculate().

      * INIZIO ***********************************************************
      * FORMATTAZIONE CELLE   
      *
           MODIFY  olWrkSh      Range("C4")::Value = "A".
           MODIFY  olWrkSh      Range("D4")::Value = "B".
           MODIFY  olWrkSh      Range("C5")::Value = "Dream Theater".
           MODIFY  olWrkSh      Range("C6")::Value = "Blind Guardian".
           MODIFY  olWrkSh      Range("D5")::Value = "Heaven & Hell".
           MODIFY  olWrkSh      Range("D6")::Value = "Queensryche".

      *     Columns("C:D").Select
      *     Columns("C:D").EntireColumn.AutoFit
           MODIFY  olWrkSh      Range("C:D")::Columns()::Select().
           MODIFY  olWrkSh      Range("C:D")::EntireColumn()::AutoFit().
      *     Range("C5").Select
      *     Selection.Font.Bold = True
      *    MODIFY  olWrkSh      Range("C5")::Select()                             | this causes MAV
      *            GIVING       oRange.                                           | this causes MAV
      *    MODIFY  oRange       @Font::Bold = 1.                                  | this causes MAV

           INQUIRE olWrkSh      Range("C5")::Font
                   IN oFont.
           MODIFY  oFont        Bold = 1.   

      * alternative method for Bold     
           MODIFY  olWrkSh      Range("A1:B1")::Font()::Bold(1)

      *     Range("D5").Select
      *     Selection.Font.Italic = True
           INQUIRE olWrkSh      Range("D5")::Font
                   IN oFont.
           MODIFY  oFont        Italic = 1. 

      *     Range("D6").Select
      *     With Selection.Font
      *             .Color = -16776961
      *             .TintAndShade = 0
      *     End With   
           INQUIRE olWrkSh      Range("D6")::Font
                   IN oFont.
           MODIFY  oFont        Color = -16776961.   

      *     Range("C6").Select
      *     With Selection.Interior
      *             .Pattern = xlSolid
      *             .PatternColorIndex = xlAutomatic
      *             .Color = 65535
      *             .TintAndShade = 0
      *             .PatternTintAndShade = 0
      *         End With   
           INQUIRE olWrkSh      Range("C6")::Interior
                   IN           oInterior.       
           MODIFY  oInterior    Pattern = xlSolid
                                PatternColorIndex = xlAutomatic
                                Color = 65535.

      *     Columns("C:D").Select
      *     With Selection
      *             .HorizontalAlignment = xlCenter
      *             .VerticalAlignment = xlCenter
      *             .WrapText = False
      *             .Orientation = 0
      *             .AddIndent = False
      *             .IndentLevel = 0
      *             .ShrinkToFit = False
      *             .ReadingOrder = xlContext
      *             .MergeCells = False
      *     End With   
           MODIFY olWrkSh       
                       Range("C4:D6")::HorizontalAlignment = xlCenter
           MODIFY olWrkSh       
                       Range("C4:D6")::VerticalAlignment = xlCenter.
      *     With Selection.Borders(xlEdgeBottom)
      *         .LineStyle = xlContinuous
      *         .Weight = xlThin
      *         .ColorIndex = xlAutomatic
      *     End With
           MODIFY  olWrkSh      Range("C5:D6")::BorderAround(
                                   BY NAME LineStyle = xlContinuous
                                   BY NAME Weight = xlThin
                                   BY NAME ColorIndex = xlAutomatic
                                   )             

      * FINE *************************************************************



      * FORMATO NUMERO **************************************************
           MODIFY  olWrkSh      Range("A5")::Value = 12345,99.
           MODIFY  olWrkSh      Range("A5")::NumberFormat = "0,00".       

      *     MODIFY  olWrkSh      Range("A17")::NumberFormat = "General"
      *     MODIFY  olWrkSh      Rows(1)::NumberFormat = "hh:mm:ss"
      *     MODIFY  olWrkSh      Columns("C")::NumberFormat =
      *                          "$#,##0.00_);[Red]($#,##0.00)"


      * FORMATO DATA ****************************************************
      * set the value of a date into a cell
      *    objExcel.Cells(1,1).NumberFormat = "mm.dd.yyyy"
      *
      *    01 is the day, 02 is the month
      *
           MOVE "01/02/2003" TO ws-date.
           MODIFY olWrkSh Range("A2")::Value = ws-date.
           INQUIRE olWrkSh Range("A2")::NumberFormat IN ws-date.
           IF ws-date(1:2) = "gg"
              MOVE "01/02/2003" TO ws-date
           ELSE
              MOVE "02/01/2003" TO ws-date
           END-IF
           MODIFY olWrkSh Range("A2")::Value = ws-date.
           MODIFY olWrkSh Range("A2")::NumberFormat = "gg/MM/aaaa".

      * LARGHEZZA COLONNA ***********************************************
      * [URL]msdn.microsoft.com/.../URL]

           MODIFY olWrkSh        Range("F1")::ColumnWidth = 4
           MODIFY olWrkSh        Range("F1")::RowHeight = 30

      *   
      * END *************************************************************                   
      *   
      * INIZIO ***********************************************************
      * Aggiungi un foglio a destra
           MODIFY  olWrkBk          Worksheets::Add()
                   GIVING olWrkShNEW.

           INQUIRE olWrkBk          Worksheets::Count IN ws-count
           INQUIRE olWrkBk          Worksheets::Item(ws-count) IN
                   olWrkSh.
           MODIFY  olWrkShNEW       @Move(BY NAME After olWrkSh)           

      * FINE *************************************************************                   
      *
      * INIZIO ***********************************************************
      * Copia un foglio
      *
      *    Sheets("Sheet1").Select
      *    Sheets("Sheet1").Copy After:=Sheets(3)
           INQUIRE olWrkBk          Worksheets::Item(1) IN
                   olWrkSh.

           MODIFY  olWrkSh          @Copy(BY NAME After olWrkSh)

      * FINE *************************************************************                   
      *

      * INIZIO ***********************************************************
      * INQUIRE DEL SEGNO DI SEPARAZIONE DECIMALE
      *
      *    INQUIRE olWrkBk @Application::DecimalSeparator                | 2003
      *                     IN WS-SEPARATOR                              | 2003
      * FINE *************************************************************                   
      *

           DESTROY oFont.
           DESTROY olWrkSh.
           DESTROY olWrkShNEW.   

      *Enforce a close without save, or Excel will prompt you.
           MODIFY  olWrkBk          @Close(BY NAME SaveChanges 0).
           DESTROY olWrkBk.
           MODIFY  olExcel          Quit().
      *This next line is very important, otherwise Excel will stick in
      *memory.

           DESTROY olExcel.
           GOBACK.

hmm, i know safe array in delphi but in cobol?

[Migrated content. Thread originally posted on 07 July 2009]

From my ever hard working buddy Claudio. A lot of examples on how to manipulate cells in Excel.

       IDENTIFICATION               DIVISION.
       PROGRAM-ID.                  ExcelSimple.
      * Compile with one of the following commandlines,
      * accordingly with your Office version
      *
      * ccbl32 -ga -si 2003 -sx 2000 ExcelSimple.cbl
      * ccbl32 -ga -sx 2003 -si 2000 ExcelSimple.cbl
      *
      *           
       ENVIRONMENT DIVISION.
       CONFIGURATION                SECTION.
       SPECIAL-NAMES.
      *    COPY    "excel.def".                                          | 2003
      *    COPY    "excel-2000.def".                                     | 2000
           decimal-point is comma.
       DATA        DIVISION.
       WORKING-STORAGE              SECTION.
       77  olExcel                  HANDLE OF APPLICATION.
       77  olWrkBk                  HANDLE OF WORKBOOK.
       77  olWrkSh                  HANDLE OF WORKSHEET.
       77  olWrkShNEW               HANDLE OF WORKSHEET.   
       77  oRange                   HANDLE OF RANGE.     
       77  oFont                    HANDLE OF @Font. 
       77  oInterior                HANDLE OF Interior.
       77  MY-STRING                PIC X(80).
       77  ws-count                 PIC 9(5).
       77  H-VARIANT                USAGE HANDLE.
       77  RESULT-CODE              PIC S9.
       77  ws-date                  PIC X(10).
       77  WS-SEPARATOR             PIC X.

       PROCEDURE DIVISION.
       Main.
           CREATE  Application      OF Excel
                   HANDLE           IN olExcel.
      *This is for training purposes only. If you don't want to see
      *Excel, remove this line.
           MODIFY  olExcel          @Visible = 1.
           MODIFY  olExcel          Workbooks::Add()
                   GIVING           olWrkBk.
           INQUIRE olWrkBk          Worksheets::Item(1) IN
                   olWrkSh.
      *Set the value of a cell.
           MODIFY  olWrkSh          Range("A1")::Value = "Last Name".
      *Get the value of a cell.
           INQUIRE olWrkSh          Range("A1")::Value IN MY-STRING.
      *Force a recalculation of a sheet
      *    MODIFY  olWrkSh          Range("A1")::Calculate().

      * INIZIO ***********************************************************
      * FORMATTAZIONE CELLE   
      *
           MODIFY  olWrkSh      Range("C4")::Value = "A".
           MODIFY  olWrkSh      Range("D4")::Value = "B".
           MODIFY  olWrkSh      Range("C5")::Value = "Dream Theater".
           MODIFY  olWrkSh      Range("C6")::Value = "Blind Guardian".
           MODIFY  olWrkSh      Range("D5")::Value = "Heaven & Hell".
           MODIFY  olWrkSh      Range("D6")::Value = "Queensryche".

      *     Columns("C:D").Select
      *     Columns("C:D").EntireColumn.AutoFit
           MODIFY  olWrkSh      Range("C:D")::Columns()::Select().
           MODIFY  olWrkSh      Range("C:D")::EntireColumn()::AutoFit().
      *     Range("C5").Select
      *     Selection.Font.Bold = True
      *    MODIFY  olWrkSh      Range("C5")::Select()                             | this causes MAV
      *            GIVING       oRange.                                           | this causes MAV
      *    MODIFY  oRange       @Font::Bold = 1.                                  | this causes MAV

           INQUIRE olWrkSh      Range("C5")::Font
                   IN oFont.
           MODIFY  oFont        Bold = 1.   

      * alternative method for Bold     
           MODIFY  olWrkSh      Range("A1:B1")::Font()::Bold(1)

      *     Range("D5").Select
      *     Selection.Font.Italic = True
           INQUIRE olWrkSh      Range("D5")::Font
                   IN oFont.
           MODIFY  oFont        Italic = 1. 

      *     Range("D6").Select
      *     With Selection.Font
      *             .Color = -16776961
      *             .TintAndShade = 0
      *     End With   
           INQUIRE olWrkSh      Range("D6")::Font
                   IN oFont.
           MODIFY  oFont        Color = -16776961.   

      *     Range("C6").Select
      *     With Selection.Interior
      *             .Pattern = xlSolid
      *             .PatternColorIndex = xlAutomatic
      *             .Color = 65535
      *             .TintAndShade = 0
      *             .PatternTintAndShade = 0
      *         End With   
           INQUIRE olWrkSh      Range("C6")::Interior
                   IN           oInterior.       
           MODIFY  oInterior    Pattern = xlSolid
                                PatternColorIndex = xlAutomatic
                                Color = 65535.

      *     Columns("C:D").Select
      *     With Selection
      *             .HorizontalAlignment = xlCenter
      *             .VerticalAlignment = xlCenter
      *             .WrapText = False
      *             .Orientation = 0
      *             .AddIndent = False
      *             .IndentLevel = 0
      *             .ShrinkToFit = False
      *             .ReadingOrder = xlContext
      *             .MergeCells = False
      *     End With   
           MODIFY olWrkSh       
                       Range("C4:D6")::HorizontalAlignment = xlCenter
           MODIFY olWrkSh       
                       Range("C4:D6")::VerticalAlignment = xlCenter.
      *     With Selection.Borders(xlEdgeBottom)
      *         .LineStyle = xlContinuous
      *         .Weight = xlThin
      *         .ColorIndex = xlAutomatic
      *     End With
           MODIFY  olWrkSh      Range("C5:D6")::BorderAround(
                                   BY NAME LineStyle = xlContinuous
                                   BY NAME Weight = xlThin
                                   BY NAME ColorIndex = xlAutomatic
                                   )             

      * FINE *************************************************************



      * FORMATO NUMERO **************************************************
           MODIFY  olWrkSh      Range("A5")::Value = 12345,99.
           MODIFY  olWrkSh      Range("A5")::NumberFormat = "0,00".       

      *     MODIFY  olWrkSh      Range("A17")::NumberFormat = "General"
      *     MODIFY  olWrkSh      Rows(1)::NumberFormat = "hh:mm:ss"
      *     MODIFY  olWrkSh      Columns("C")::NumberFormat =
      *                          "$#,##0.00_);[Red]($#,##0.00)"


      * FORMATO DATA ****************************************************
      * set the value of a date into a cell
      *    objExcel.Cells(1,1).NumberFormat = "mm.dd.yyyy"
      *
      *    01 is the day, 02 is the month
      *
           MOVE "01/02/2003" TO ws-date.
           MODIFY olWrkSh Range("A2")::Value = ws-date.
           INQUIRE olWrkSh Range("A2")::NumberFormat IN ws-date.
           IF ws-date(1:2) = "gg"
              MOVE "01/02/2003" TO ws-date
           ELSE
              MOVE "02/01/2003" TO ws-date
           END-IF
           MODIFY olWrkSh Range("A2")::Value = ws-date.
           MODIFY olWrkSh Range("A2")::NumberFormat = "gg/MM/aaaa".

      * LARGHEZZA COLONNA ***********************************************
      * [URL]msdn.microsoft.com/.../URL]

           MODIFY olWrkSh        Range("F1")::ColumnWidth = 4
           MODIFY olWrkSh        Range("F1")::RowHeight = 30

      *   
      * END *************************************************************                   
      *   
      * INIZIO ***********************************************************
      * Aggiungi un foglio a destra
           MODIFY  olWrkBk          Worksheets::Add()
                   GIVING olWrkShNEW.

           INQUIRE olWrkBk          Worksheets::Count IN ws-count
           INQUIRE olWrkBk          Worksheets::Item(ws-count) IN
                   olWrkSh.
           MODIFY  olWrkShNEW       @Move(BY NAME After olWrkSh)           

      * FINE *************************************************************                   
      *
      * INIZIO ***********************************************************
      * Copia un foglio
      *
      *    Sheets("Sheet1").Select
      *    Sheets("Sheet1").Copy After:=Sheets(3)
           INQUIRE olWrkBk          Worksheets::Item(1) IN
                   olWrkSh.

           MODIFY  olWrkSh          @Copy(BY NAME After olWrkSh)

      * FINE *************************************************************                   
      *

      * INIZIO ***********************************************************
      * INQUIRE DEL SEGNO DI SEPARAZIONE DECIMALE
      *
      *    INQUIRE olWrkBk @Application::DecimalSeparator                | 2003
      *                     IN WS-SEPARATOR                              | 2003
      * FINE *************************************************************                   
      *

           DESTROY oFont.
           DESTROY olWrkSh.
           DESTROY olWrkShNEW.   

      *Enforce a close without save, or Excel will prompt you.
           MODIFY  olWrkBk          @Close(BY NAME SaveChanges 0).
           DESTROY olWrkBk.
           MODIFY  olExcel          Quit().
      *This next line is very important, otherwise Excel will stick in
      *memory.

           DESTROY olExcel.
           GOBACK.

There is safearray in Acu too. Here is an example.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. ExcelChart.
      *====================
      *
      * Copyright (c) 1996-2001 by Acucorp, Inc.  Users of ACUCOBOL
      * may freely modify and redistribute this program.
      *
      * The purpose of this application is to show how to use MS Excel
      * to create a chart using values we first provide in cells.
      *
       ENVIRONMENT DIVISION.
       CONFIGURATION                SECTION.
       SPECIAL-NAMES.
           COPY    "MSEXCEL.def".
                   .
       DATA        DIVISION.
       WORKING-STORAGE              SECTION.
       77  oXL                      HANDLE OF Application.
       77  oBook                    HANDLE OF Workbook.
       77  oSheet                   HANDLE OF Worksheet.
       77  oChartObjects            HANDLE OF ChartObjects.
       77  oChartObject             HANDLE OF ChartObject.
       77  oChart                   HANDLE OF Chart.
       77  oRange                   HANDLE OF Range.
       01  MyTable.
           03 FILLER                OCCURS 10.
              05 MyItem             USAGE HANDLE OF VARIANT OCCURS 2.
       77  I                        PIC 9(3).
       77  J                        PIC 9(3).
       77  MyData                   PIC X(80).
       01  RND-VALUE                PIC 9(12)V9(5).
       PROCEDURE DIVISION.
       Main.
           PERFORM GEN-TABLE.
           CREATE  Application      OF Excel
                   HANDLE           IN oXL.
      *This is for training purposes only. If you don't want to see
      *Excel, remove this line.
           MODIFY  oXL              @Visible = 1.
           
      *Add a book
           MODIFY  oXL              Workbooks::Add()
                   GIVING           oBook.
                   
      *Get the first worksheet
           INQUIRE oBook            Worksheets::Item(1) IN
                   oSheet.
                   
      *Transfer the data, using the safearray created in GEN-TABLE
           MODIFY  oSheet
                   Range("A1")::Resize(10 , 2)::Value =
                   MyTable.
                 
      *Get the chart collection
           MODIFY  oSheet           ChartObjects()
                   GIVING           oChartObjects.
                   
      *Add a chart, given dimensions.
           MODIFY  oChartObjects    @Add(100, 100, 300, 200)
                   GIVING           oChartObject.
                   
      *Get the handle to the new chart object.
           INQUIRE oChartObject     Chart IN oChart.
           
      *Select data source for chart in a range object
           INQUIRE oSheet           Range("A1")::Resize(10 , 2) IN
                   oRange.
                   
      *Set the datasource for the chart to the range returned above.
           MODIFY  oChart           SetSourceData(
                   BY NAME          Source = oRange).
    ACCEPT  OMITTED.
      *Clean up...
           DESTROY oRange.
           DESTROY oChart.
           DESTROY oChartObject.
           DESTROY oChartObjects.
           DESTROY oSheet.
      *Enforce a close without save, or Excel will prompt you.
           MODIFY  oBook            @Close(BY NAME SaveChanges 0).
           DESTROY oBook.
           MODIFY  oXL              Quit().
      *This next line is very important, otherwise Excel will stick in
      *memory.
           DESTROY oXL.
           GOBACK.
      *This section depends on the presens of the sample program rand.cbl
      *as provided in the sample directory of an ACUCOBOL-GT development
      *installation.
      *We here fill the variant table with data.
       GEN-TABLE SECTION.
       GEN-TABLE-001.
           PERFORM VARYING          I FROM 1 BY 1 UNTIL I > 10
                   PERFORM VARYING  J FROM 1 BY 1 UNTIL J > 2
                                    MOVE FUNCTION RANDOM() TO
                                         RND-VALUE
                                    MULTIPLY RND-VALUE BY 50 GIVING
                                             RND-VALUE
                                    ADD  1 TO RND-VALUE
                                    CALL "C$SETVARIANT" USING
                                         RND-VALUE
                                         MyItem(I, J)
                                         END-CALL
                   END-PERFORM
           END-PERFORM.
       GEN-TABLE-900.
       GEN-TABLE-EXIT.
           EXIT.

[Migrated content. Thread originally posted on 07 July 2009]

From my ever hard working buddy Claudio. A lot of examples on how to manipulate cells in Excel.

       IDENTIFICATION               DIVISION.
       PROGRAM-ID.                  ExcelSimple.
      * Compile with one of the following commandlines,
      * accordingly with your Office version
      *
      * ccbl32 -ga -si 2003 -sx 2000 ExcelSimple.cbl
      * ccbl32 -ga -sx 2003 -si 2000 ExcelSimple.cbl
      *
      *           
       ENVIRONMENT DIVISION.
       CONFIGURATION                SECTION.
       SPECIAL-NAMES.
      *    COPY    "excel.def".                                          | 2003
      *    COPY    "excel-2000.def".                                     | 2000
           decimal-point is comma.
       DATA        DIVISION.
       WORKING-STORAGE              SECTION.
       77  olExcel                  HANDLE OF APPLICATION.
       77  olWrkBk                  HANDLE OF WORKBOOK.
       77  olWrkSh                  HANDLE OF WORKSHEET.
       77  olWrkShNEW               HANDLE OF WORKSHEET.   
       77  oRange                   HANDLE OF RANGE.     
       77  oFont                    HANDLE OF @Font. 
       77  oInterior                HANDLE OF Interior.
       77  MY-STRING                PIC X(80).
       77  ws-count                 PIC 9(5).
       77  H-VARIANT                USAGE HANDLE.
       77  RESULT-CODE              PIC S9.
       77  ws-date                  PIC X(10).
       77  WS-SEPARATOR             PIC X.

       PROCEDURE DIVISION.
       Main.
           CREATE  Application      OF Excel
                   HANDLE           IN olExcel.
      *This is for training purposes only. If you don't want to see
      *Excel, remove this line.
           MODIFY  olExcel          @Visible = 1.
           MODIFY  olExcel          Workbooks::Add()
                   GIVING           olWrkBk.
           INQUIRE olWrkBk          Worksheets::Item(1) IN
                   olWrkSh.
      *Set the value of a cell.
           MODIFY  olWrkSh          Range("A1")::Value = "Last Name".
      *Get the value of a cell.
           INQUIRE olWrkSh          Range("A1")::Value IN MY-STRING.
      *Force a recalculation of a sheet
      *    MODIFY  olWrkSh          Range("A1")::Calculate().

      * INIZIO ***********************************************************
      * FORMATTAZIONE CELLE   
      *
           MODIFY  olWrkSh      Range("C4")::Value = "A".
           MODIFY  olWrkSh      Range("D4")::Value = "B".
           MODIFY  olWrkSh      Range("C5")::Value = "Dream Theater".
           MODIFY  olWrkSh      Range("C6")::Value = "Blind Guardian".
           MODIFY  olWrkSh      Range("D5")::Value = "Heaven & Hell".
           MODIFY  olWrkSh      Range("D6")::Value = "Queensryche".

      *     Columns("C:D").Select
      *     Columns("C:D").EntireColumn.AutoFit
           MODIFY  olWrkSh      Range("C:D")::Columns()::Select().
           MODIFY  olWrkSh      Range("C:D")::EntireColumn()::AutoFit().
      *     Range("C5").Select
      *     Selection.Font.Bold = True
      *    MODIFY  olWrkSh      Range("C5")::Select()                             | this causes MAV
      *            GIVING       oRange.                                           | this causes MAV
      *    MODIFY  oRange       @Font::Bold = 1.                                  | this causes MAV

           INQUIRE olWrkSh      Range("C5")::Font
                   IN oFont.
           MODIFY  oFont        Bold = 1.   

      * alternative method for Bold     
           MODIFY  olWrkSh      Range("A1:B1")::Font()::Bold(1)

      *     Range("D5").Select
      *     Selection.Font.Italic = True
           INQUIRE olWrkSh      Range("D5")::Font
                   IN oFont.
           MODIFY  oFont        Italic = 1. 

      *     Range("D6").Select
      *     With Selection.Font
      *             .Color = -16776961
      *             .TintAndShade = 0
      *     End With   
           INQUIRE olWrkSh      Range("D6")::Font
                   IN oFont.
           MODIFY  oFont        Color = -16776961.   

      *     Range("C6").Select
      *     With Selection.Interior
      *             .Pattern = xlSolid
      *             .PatternColorIndex = xlAutomatic
      *             .Color = 65535
      *             .TintAndShade = 0
      *             .PatternTintAndShade = 0
      *         End With   
           INQUIRE olWrkSh      Range("C6")::Interior
                   IN           oInterior.       
           MODIFY  oInterior    Pattern = xlSolid
                                PatternColorIndex = xlAutomatic
                                Color = 65535.

      *     Columns("C:D").Select
      *     With Selection
      *             .HorizontalAlignment = xlCenter
      *             .VerticalAlignment = xlCenter
      *             .WrapText = False
      *             .Orientation = 0
      *             .AddIndent = False
      *             .IndentLevel = 0
      *             .ShrinkToFit = False
      *             .ReadingOrder = xlContext
      *             .MergeCells = False
      *     End With   
           MODIFY olWrkSh       
                       Range("C4:D6")::HorizontalAlignment = xlCenter
           MODIFY olWrkSh       
                       Range("C4:D6")::VerticalAlignment = xlCenter.
      *     With Selection.Borders(xlEdgeBottom)
      *         .LineStyle = xlContinuous
      *         .Weight = xlThin
      *         .ColorIndex = xlAutomatic
      *     End With
           MODIFY  olWrkSh      Range("C5:D6")::BorderAround(
                                   BY NAME LineStyle = xlContinuous
                                   BY NAME Weight = xlThin
                                   BY NAME ColorIndex = xlAutomatic
                                   )             

      * FINE *************************************************************



      * FORMATO NUMERO **************************************************
           MODIFY  olWrkSh      Range("A5")::Value = 12345,99.
           MODIFY  olWrkSh      Range("A5")::NumberFormat = "0,00".       

      *     MODIFY  olWrkSh      Range("A17")::NumberFormat = "General"
      *     MODIFY  olWrkSh      Rows(1)::NumberFormat = "hh:mm:ss"
      *     MODIFY  olWrkSh      Columns("C")::NumberFormat =
      *                          "$#,##0.00_);[Red]($#,##0.00)"


      * FORMATO DATA ****************************************************
      * set the value of a date into a cell
      *    objExcel.Cells(1,1).NumberFormat = "mm.dd.yyyy"
      *
      *    01 is the day, 02 is the month
      *
           MOVE "01/02/2003" TO ws-date.
           MODIFY olWrkSh Range("A2")::Value = ws-date.
           INQUIRE olWrkSh Range("A2")::NumberFormat IN ws-date.
           IF ws-date(1:2) = "gg"
              MOVE "01/02/2003" TO ws-date
           ELSE
              MOVE "02/01/2003" TO ws-date
           END-IF
           MODIFY olWrkSh Range("A2")::Value = ws-date.
           MODIFY olWrkSh Range("A2")::NumberFormat = "gg/MM/aaaa".

      * LARGHEZZA COLONNA ***********************************************
      * [URL]msdn.microsoft.com/.../URL]

           MODIFY olWrkSh        Range("F1")::ColumnWidth = 4
           MODIFY olWrkSh        Range("F1")::RowHeight = 30

      *   
      * END *************************************************************                   
      *   
      * INIZIO ***********************************************************
      * Aggiungi un foglio a destra
           MODIFY  olWrkBk          Worksheets::Add()
                   GIVING olWrkShNEW.

           INQUIRE olWrkBk          Worksheets::Count IN ws-count
           INQUIRE olWrkBk          Worksheets::Item(ws-count) IN
                   olWrkSh.
           MODIFY  olWrkShNEW       @Move(BY NAME After olWrkSh)           

      * FINE *************************************************************                   
      *
      * INIZIO ***********************************************************
      * Copia un foglio
      *
      *    Sheets("Sheet1").Select
      *    Sheets("Sheet1").Copy After:=Sheets(3)
           INQUIRE olWrkBk          Worksheets::Item(1) IN
                   olWrkSh.

           MODIFY  olWrkSh          @Copy(BY NAME After olWrkSh)

      * FINE *************************************************************                   
      *

      * INIZIO ***********************************************************
      * INQUIRE DEL SEGNO DI SEPARAZIONE DECIMALE
      *
      *    INQUIRE olWrkBk @Application::DecimalSeparator                | 2003
      *                     IN WS-SEPARATOR                              | 2003
      * FINE *************************************************************                   
      *

           DESTROY oFont.
           DESTROY olWrkSh.
           DESTROY olWrkShNEW.   

      *Enforce a close without save, or Excel will prompt you.
           MODIFY  olWrkBk          @Close(BY NAME SaveChanges 0).
           DESTROY olWrkBk.
           MODIFY  olExcel          Quit().
      *This next line is very important, otherwise Excel will stick in
      *memory.

           DESTROY olExcel.
           GOBACK.

[archive] gforseth originally wrote:
From my ever hard working buddy Claudio. A lot of examples on how to manipulate cells in Excel.

       IDENTIFICATION               DIVISION.
       PROGRAM-ID.                  ExcelSimple.
      * Compile with one of the following commandlines,
      * accordingly with your Office version
      *
      * ccbl32 -ga -si 2003 -sx 2000 ExcelSimple.cbl
      * ccbl32 -ga -sx 2003 -si 2000 ExcelSimple.cbl
      *
      *           
       ENVIRONMENT DIVISION.
       CONFIGURATION                SECTION.
       SPECIAL-NAMES.
      *    COPY    "excel.def".                                          | 2003
      *    COPY    "excel-2000.def".                                     | 2000
           decimal-point is comma.
       DATA        DIVISION.
       WORKING-STORAGE              SECTION.
       77  olExcel                  HANDLE OF APPLICATION.
       77  olWrkBk                  HANDLE OF WORKBOOK.
       77  olWrkSh                  HANDLE OF WORKSHEET.
       77  olWrkShNEW               HANDLE OF WORKSHEET.   
       77  oRange                   HANDLE OF RANGE.     
       77  oFont                    HANDLE OF @Font. 
       77  oInterior                HANDLE OF Interior.
       77  MY-STRING                PIC X(80).
       77  ws-count                 PIC 9(5).
       77  H-VARIANT                USAGE HANDLE.
       77  RESULT-CODE              PIC S9.
       77  ws-date                  PIC X(10).
       77  WS-SEPARATOR             PIC X.

       PROCEDURE DIVISION.
       Main.
           CREATE  Application      OF Excel
                   HANDLE           IN olExcel.
      *This is for training purposes only. If you don't want to see
      *Excel, remove this line.
           MODIFY  olExcel          @Visible = 1.
           MODIFY  olExcel          Workbooks::Add()
                   GIVING           olWrkBk.
           INQUIRE olWrkBk          Worksheets::Item(1) IN
                   olWrkSh.
      *Set the value of a cell.
           MODIFY  olWrkSh          Range("A1")::Value = "Last Name".
      *Get the value of a cell.
           INQUIRE olWrkSh          Range("A1")::Value IN MY-STRING.
      *Force a recalculation of a sheet
      *    MODIFY  olWrkSh          Range("A1")::Calculate().

      * INIZIO ***********************************************************
      * FORMATTAZIONE CELLE   
      *
           MODIFY  olWrkSh      Range("C4")::Value = "A".
           MODIFY  olWrkSh      Range("D4")::Value = "B".
           MODIFY  olWrkSh      Range("C5")::Value = "Dream Theater".
           MODIFY  olWrkSh      Range("C6")::Value = "Blind Guardian".
           MODIFY  olWrkSh      Range("D5")::Value = "Heaven & Hell".
           MODIFY  olWrkSh      Range("D6")::Value = "Queensryche".

      *     Columns("C:D").Select
      *     Columns("C:D").EntireColumn.AutoFit
           MODIFY  olWrkSh      Range("C:D")::Columns()::Select().
           MODIFY  olWrkSh      Range("C:D")::EntireColumn()::AutoFit().
      *     Range("C5").Select
      *     Selection.Font.Bold = True
      *    MODIFY  olWrkSh      Range("C5")::Select()                             | this causes MAV
      *            GIVING       oRange.                                           | this causes MAV
      *    MODIFY  oRange       @Font::Bold = 1.                                  | this causes MAV

           INQUIRE olWrkSh      Range("C5")::Font
                   IN oFont.
           MODIFY  oFont        Bold = 1.   

      * alternative method for Bold     
           MODIFY  olWrkSh      Range("A1:B1")::Font()::Bold(1)

      *     Range("D5").Select
      *     Selection.Font.Italic = True
           INQUIRE olWrkSh      Range("D5")::Font
                   IN oFont.
           MODIFY  oFont        Italic = 1. 

      *     Range("D6").Select
      *     With Selection.Font
      *             .Color = -16776961
      *             .TintAndShade = 0
      *     End With   
           INQUIRE olWrkSh      Range("D6")::Font
                   IN oFont.
           MODIFY  oFont        Color = -16776961.   

      *     Range("C6").Select
      *     With Selection.Interior
      *             .Pattern = xlSolid
      *             .PatternColorIndex = xlAutomatic
      *             .Color = 65535
      *             .TintAndShade = 0
      *             .PatternTintAndShade = 0
      *         End With   
           INQUIRE olWrkSh      Range("C6")::Interior
                   IN           oInterior.       
           MODIFY  oInterior    Pattern = xlSolid
                                PatternColorIndex = xlAutomatic
                                Color = 65535.

      *     Columns("C:D").Select
      *     With Selection
      *             .HorizontalAlignment = xlCenter
      *             .VerticalAlignment = xlCenter
      *             .WrapText = False
      *             .Orientation = 0
      *             .AddIndent = False
      *             .IndentLevel = 0
      *             .ShrinkToFit = False
      *             .ReadingOrder = xlContext
      *             .MergeCells = False
      *     End With   
           MODIFY olWrkSh       
                       Range("C4:D6")::HorizontalAlignment = xlCenter
           MODIFY olWrkSh       
                       Range("C4:D6")::VerticalAlignment = xlCenter.
      *     With Selection.Borders(xlEdgeBottom)
      *         .LineStyle = xlContinuous
      *         .Weight = xlThin
      *         .ColorIndex = xlAutomatic
      *     End With
           MODIFY  olWrkSh      Range("C5:D6")::BorderAround(
                                   BY NAME LineStyle = xlContinuous
                                   BY NAME Weight = xlThin
                                   BY NAME ColorIndex = xlAutomatic
                                   )             

      * FINE *************************************************************



      * FORMATO NUMERO **************************************************
           MODIFY  olWrkSh      Range("A5")::Value = 12345,99.
           MODIFY  olWrkSh      Range("A5")::NumberFormat = "0,00".       

      *     MODIFY  olWrkSh      Range("A17")::NumberFormat = "General"
      *     MODIFY  olWrkSh      Rows(1)::NumberFormat = "hh:mm:ss"
      *     MODIFY  olWrkSh      Columns("C")::NumberFormat =
      *                          "$#,##0.00_);[Red]($#,##0.00)"


      * FORMATO DATA ****************************************************
      * set the value of a date into a cell
      *    objExcel.Cells(1,1).NumberFormat = "mm.dd.yyyy"
      *
      *    01 is the day, 02 is the month
      *
           MOVE "01/02/2003" TO ws-date.
           MODIFY olWrkSh Range("A2")::Value = ws-date.
           INQUIRE olWrkSh Range("A2")::NumberFormat IN ws-date.
           IF ws-date(1:2) = "gg"
              MOVE "01/02/2003" TO ws-date
           ELSE
              MOVE "02/01/2003" TO ws-date
           END-IF
           MODIFY olWrkSh Range("A2")::Value = ws-date.
           MODIFY olWrkSh Range("A2")::NumberFormat = "gg/MM/aaaa".

      * LARGHEZZA COLONNA ***********************************************
      * [URL]msdn.microsoft.com/.../URL]

           MODIFY olWrkSh        Range("F1")::ColumnWidth = 4
           MODIFY olWrkSh        Range("F1")::RowHeight = 30

      *   
      * END *************************************************************                   
      *   
      * INIZIO ***********************************************************
      * Aggiungi un foglio a destra
           MODIFY  olWrkBk          Worksheets::Add()
                   GIVING olWrkShNEW.

           INQUIRE olWrkBk          Worksheets::Count IN ws-count
           INQUIRE olWrkBk          Worksheets::Item(ws-count) IN
                   olWrkSh.
           MODIFY  olWrkShNEW       @Move(BY NAME After olWrkSh)           

      * FINE *************************************************************                   
      *
      * INIZIO ***********************************************************
      * Copia un foglio
      *
      *    Sheets("Sheet1").Select
      *    Sheets("Sheet1").Copy After:=Sheets(3)
           INQUIRE olWrkBk          Worksheets::Item(1) IN
                   olWrkSh.

           MODIFY  olWrkSh          @Copy(BY NAME After olWrkSh)

      * FINE *************************************************************                   
      *

      * INIZIO ***********************************************************
      * INQUIRE DEL SEGNO DI SEPARAZIONE DECIMALE
      *
      *    INQUIRE olWrkBk @Application::DecimalSeparator                | 2003
      *                     IN WS-SEPARATOR                              | 2003
      * FINE *************************************************************                   
      *

           DESTROY oFont.
           DESTROY olWrkSh.
           DESTROY olWrkShNEW.   

      *Enforce a close without save, or Excel will prompt you.
           MODIFY  olWrkBk          @Close(BY NAME SaveChanges 0).
           DESTROY olWrkBk.
           MODIFY  olExcel          Quit().
      *This next line is very important, otherwise Excel will stick in
      *memory.

           DESTROY olExcel.
           GOBACK.




Hello, excuse me but when I run the code executes the command:
" MODIFY olExcel Workbooks::Add()
GIVING olWrkBk.
"
run the installation of Microsoft Office.

I specify that I compiled with version 8.1 and I instalato Office 2003

What can I do?

thanks

P. S. Sorry for my English