⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 excel-ole.cbl

📁 excel ole for your reference
💻 CBL
字号:
       IDENTIFICATION DIVISION.
       PROGRAM-ID.                      EXCEL-OLE.
       AUTHOR.                          Dan Maltes, AST.
       DATE-WRITTEN.                    2002/12/15 - 12:00:00.
       DATE-COMPILED.                   2002/12/15 - 12:00:00.
       REMARKS.  Example of controlling excel 2002(office xp) through ole automation.
           The excel object model states that an Application object
           contains Workbooks which contains Worksheets which contains
           a Range(cells).
           Excel Object Model
            - Application
              + Workbooks(Workbook) collection
                + Worksheets(Worksheet) collection
                  - Range(cells)

           Note: You will need to generate your own excel.def file with
                 the AXDEFGEN utility.  This sample was tested with an
                 excel.def file generated for the
                 Microsoft Excel 10.0 Object Library(Ver 1.4)
                 which is part of MS Office XP.
                 You may need to make changes to this program for
                 compatibility with office 2000 and office 97.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
       COPY "EXCEL.DEF".
            .
       INPUT-OUTPUT SECTION.
       FILE SECTION.
       WORKING-STORAGE SECTION.
       77 EX-APP            HANDLE OF Application.
       77 EX-WORKBOOK       HANDLE OF Workbook.
       77 EX-WORKSHEET      HANDLE OF Worksheet.
       77 EX-RANGE          HANDLE OF Range.
       77 CELL-RANGE        PIC X(04) VALUE SPACES.
       77 TXT-VALUE         PIC X(50) VALUE SPACES.
       77 NUM-VALUE         PIC 9(09) VALUE ZEROS.
       77 FORMULA-VALUE     PIC X(50) VALUE SPACES.
       77 WKBK-NAME         PIC X(100) VALUE SPACES.

       PROCEDURE DIVISION.

       MAIN SECTION.
      * Create excel application object
           CREATE @Application OF @Excel HANDLE IN EX-APP.
      * Open existing sheet logic:
      *     MODIFY EX-APP @Visible = 1.
      *     MODIFY EX-APP @GetOpenFilename() GIVING WKBK-NAME.
      *     MODIFY EX-APP @Workbooks::Open(WKBK-NAME) GIVING EX-WORKBOOK.

      * (optional)Specify default number of sheets(can't be zero).
      * If not specified, assigns excel default(usually 3), unless
      * user has changed this in excel settings.
           MODIFY EX-APP @SheetsInNewWorkBook = 1.
      * Add a new workbook, do not name it yet, will be done when saved.
           MODIFY EX-APP @Workbooks::Add() GIVING EX-WORKBOOK.

      * Can reference Sheet1 and change the name.
           INQUIRE EX-WORKBOOK @Worksheets::Item(1)
               IN EX-WORKSHEET.
           MODIFY EX-WORKSHEET @Name = "Yearly".
      *Cleanup
           DESTROY EX-WORKSHEET.

      * Add a new worksheet to workbook and name it.
           MODIFY EX-WORKBOOK @Worksheets::Add() GIVING EX-WORKSHEET.
           MODIFY EX-WORKSHEET @Name = "Quarterly".

      * Report name at top of worksheet in blue
           MOVE "A1" TO CELL-RANGE.
           MOVE "Quarterly Sales Figures for 2002" TO TXT-VALUE.
           PERFORM UPDATE-CELL-TEXT.
           INQUIRE EX-WORKSHEET @Range("A1") IN EX-RANGE.
           MODIFY EX-RANGE @Font::ColorIndex = 5.
           DESTROY EX-RANGE.

      * Column Headers
           MOVE "A3" TO CELL-RANGE.
           MOVE "QUARTER" TO TXT-VALUE.
           PERFORM UPDATE-CELL-TEXT.
           MOVE "B3" TO CELL-RANGE.
           MOVE "AMOUNT" TO TXT-VALUE.
           PERFORM UPDATE-CELL-TEXT.
      * Make headers bold with light gray background
           INQUIRE EX-WORKSHEET @Range("A3:B3") IN EX-RANGE.
           MODIFY EX-RANGE @Font::Bold = 1.
           MODIFY EX-RANGE @Interior::ColorIndex = 15.
           MODIFY EX-RANGE @Interior::Pattern = @xlSolid.
           DESTROY EX-RANGE.
      * Quarter 1
           MOVE "A4" TO CELL-RANGE.
           MOVE "1" TO TXT-VALUE.
           PERFORM UPDATE-CELL-TEXT.
           MOVE "B4" TO CELL-RANGE.
           MOVE "45554" TO NUM-VALUE.
           PERFORM UPDATE-CELL-VALUE.
      * Quarter 2
           MOVE "A5" TO CELL-RANGE.
           MOVE "2" TO TXT-VALUE.
           PERFORM UPDATE-CELL-TEXT.
           MOVE "B5" TO CELL-RANGE.
           MOVE "78990" TO NUM-VALUE.
           PERFORM UPDATE-CELL-VALUE.
      * Quarter 3
           MOVE "A6" TO CELL-RANGE.
           MOVE "3" TO TXT-VALUE.
           PERFORM UPDATE-CELL-TEXT.
           MOVE "B6" TO CELL-RANGE.
           MOVE "98807" TO NUM-VALUE.
           PERFORM UPDATE-CELL-VALUE.
      * Quarter 4
           MOVE "A7" TO CELL-RANGE.
           MOVE "4" TO TXT-VALUE.
           PERFORM UPDATE-CELL-TEXT.
           MOVE "B7" TO CELL-RANGE.
           MOVE "121764" TO NUM-VALUE.
           PERFORM UPDATE-CELL-VALUE.
      *Total
           MOVE "B8" TO CELL-RANGE.
           MOVE "'==========" TO TXT-VALUE.
           PERFORM UPDATE-CELL-TEXT.
           MOVE "B9" TO CELL-RANGE.
           MOVE "=Sum(B4:B7)" TO FORMULA-VALUE.
           PERFORM UPDATE-CELL-FORMULA.
      * Make total green with a boxed border and currency format
           INQUIRE EX-WORKSHEET @Range("B9") IN EX-RANGE.
           MODIFY EX-RANGE @Font::ColorIndex = 10.
           MODIFY EX-RANGE @BorderAround(@xlContinuous, @xlMedium,
               @xlColorIndexAutomatic).
           MODIFY EX-RANGE @Style = "Currency".
           MODIFY EX-RANGE @NumberFormat =
               "_($* #,##0_);_($* (#,##0);_($* ""-""_);_(@_)".
           DESTROY EX-RANGE.

      * Save workbook and close it
           MODIFY EX-APP @GetSaveAsFileName() GIVING WKBK-NAME.
           MODIFY EX-WORKBOOK @SaveAs(
               BY NAME @Filename WKBK-NAME,
               BY NAME @FileFormat @xlNormal,
               BY NAME @Password NULL,
               BY NAME @WriteResPassword NULL,
               BY NAME @ReadOnlyRecommended 0,
               BY NAME @CreateBackup 0
               BY NAME @AccessMode @xlNoChange).
           MODIFY EX-WORKBOOK @Close().

      * Cleanup and exit.  Handle destruction should be done in reverse
      * object heirarchy order or Excel may be left open in background
      * waiting for dangling handles to be destroyed.
      * Quit the Excel automation server before destroying its handle.
           DESTROY EX-WORKSHEET.
           DESTROY EX-WORKBOOK.
           MODIFY EX-APP @Quit().
           DESTROY EX-APP.

           EXIT PROGRAM.
           STOP RUN.

       UPDATE-CELL SECTION.
       UPDATE-CELL-VALUE.
      * Format numeric with commas and no decimals
           MODIFY EX-WORKSHEET @Range(CELL-RANGE)::Value = NUM-VALUE.
           MODIFY EX-WORKSHEET @Range(CELL-RANGE)::Style = "Comma".
           MODIFY EX-WORKSHEET @Range(CELL-RANGE)::NumberFormat =
               "_(* #,##0_);_(* (#,##0);_(* ""-""_);_(@_)".
       UPDATE-CELL-TEXT.
           MODIFY EX-WORKSHEET @Range(CELL-RANGE)::Value = TXT-VALUE.
       UPDATE-CELL-FORMULA.
           MODIFY EX-WORKSHEET
               @Range(CELL-RANGE)::Formula = FORMULA-VALUE.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -