COBOL2002 ユーザーズガイド
Excelのシートのセルに数値が設定されているときに,このセルから値を取得し,SET文を使ってCOBOLの数値項目で値を受け取る例を次に示します。このとき,VARIANT値からCOBOLのデータに暗黙的なデータ変換が行われます。
VARIANT値の概念については,マニュアル「COBOL2002 言語 拡張仕様編 18.1.1 言語の概念(OLE2オートメーションインタフェース機能)」を参照してください。
WORKING-STORAGE SECTION. 01 AP-OBJ USAGE OBJECT REFERENCE OLE. 01 CDATA-NUM PIC 9(9). …1. PROCEDURE DIVISION. INVOKE 'Excel.Application' 'CREATEOBJ' RETURNING AP-OBJ. : SET CDATA-NUM TO 'Workbooks(1).Worksheets(1).Cells(1,1).Value' WITH AP-OBJ. …2.
VARIANT値をCOBOLデータに変換する必要がない場合は,値をバリアントデータ項目で受け取ることで,受け渡したVARIANT値のポインタを保持できます。
バリアント項目で取得した値を,別のセルにそのまま設定する例を次に示します。
WORKING-STORAGE SECTION. 01 AP-OBJ USAGE OBJECT REFERENCE OLE. 01 CDATA-VAR USAGE VARIANT VALUE ZERO. …1. PROCEDURE DIVISION. INVOKE 'Excel.Application' 'CREATEOBJ' RETURNING AP-OBJ. : SET CDATA-VAR TO 'Workbooks(1).Worksheets(1).Cells(1,1).Value' WITH AP-OBJ. …2. SET 'Workbooks(1).Worksheets(1).Cells(1,2).Value' WITH AP-OBJ TO CDATA-VAR. …3.
不要となったVARIANT値は,バリアントデータ項目を初期化することで,解放できます。
不要となったVARIANT値を解放する例を次に示します。
WORKING-STORAGE SECTION. 01 AP-OBJ USAGE OBJECT REFERENCE OLE. 01 CDATA-VAR USAGE VARIANT VALUE ZERO. …1. PROCEDURE DIVISION. INVOKE 'Excel.Application' 'CREATEOBJ' RETURNING AP-OBJ. : SET CDATA-VAR TO 'Workbooks(1).Worksheets(1).Cells(1,1).Value' WITH AP-OBJ. …2. SET 'Workbooks(1).Worksheets(1).Cells(1,2).Value' WITH AP-OBJ TO CDATA-VAR. …3. SET CDATA-VAR TO NULL. …4.
取得したVARIANT値がどの型かがわからない場合は,いったんVARIANT値の型をチェックしたあとで,その型に合ったCOBOLのデータ項目に設定します。VARIANT値の型は,TYPE-OF-VARIANT関数で取得できます。TYPE-OF-VARIANT関数については,マニュアル「COBOL2002 言語 拡張仕様編 18.5.3 TYPE-OF-VARIANT関数(OLE2オートメーションインタフェース機能)」を参照ください。
VARIANT値の型をチェックしたあとで,該当するCOBOLのデータ項目に値を設定する例を次に示します。
WORKING-STORAGE SECTION. 01 AP-OBJ USAGE OBJECT REFERENCE OLE. 01 CDATA-VAR USAGE VARIANT VALUE ZERO. …1. 01 CDATA-COMP PIC S9(10) USAGE COMP. 01 CDATA-COMP2 USAGE COMP-2. 01 CDATA-ALP. 02 FILLER OCCURS 255 DEPENDING ON C-LNG PIC X. 01 C-LNG PIC 9(4) USAGE COMP VALUE ZERO. PROCEDURE DIVISION. INVOKE 'Excel.Application' 'CREATEOBJ' RETURNING AP-OBJ. : SET CDATA-VAR TO 'Workbooks(1).Worksheets(1).Cells(1,1).Value' WITH AP-OBJ. …2. EVALUATE FUNCTION TYPE-OF-VARIANT(CDATA-VAR) …3. WHEN 2 WHEN 3 …4. COMPUTE CDATA-COMP = FUNCTION VARIANT-TO-INTEGER(CDATA-VAR) WHEN 4 WHEN 5 …4. COMPUTE CDATA-COMP2 = FUNCTION VARIANT-TO-NUMERIC(CDATA-VAR) WHEN 6 WHEN 7 WHEN 8 WHEN 9 COMPUTE C-LNG = FUNCTION LENGTH-OF-VARIANT(CDATA-VAR) …5. MOVE FUNCTION VARIANT-TO-ALPHANUMERIC(CDATA-VAR) TO CDATA-ALP …4. END-EVALUATE.
SET文を使って,CONVERT-TO-VARIANT関数で作成したVARIANT
値のポインタを,バリアントデータ項目に保持したり,別のバリアントデータ項目に転記できます。
バリアントデータ項目に値を設定する例を次に示します。
WORKING-STORAGE SECTION. 01 CBL-DATA-DATE PIC X(8) VALUE '03/01/01'. 01 CDATA-VAR1 USAGE VARIANT VALUE ZERO. …1. 01 CDATA-VAR2 USAGE VARIANT VALUE ZERO. …1.' PROCEDURE DIVISION. INVOKE 'Excel.Application' 'CREATEOBJ' RETURNING AP-OBJ. : SET CDATA-VAR1 TO FUNCTION CONVERT-TO-VARIANT(7,CBL-DATA-DATE). …2. SET CDATA-VAR2 TO CDATA-VAR1. …3.
バリアントデータ項目にEXTERNAL句を指定する場合については,「4.2.2 外部属性(EXTERNAL句)」の「(2) EXTERNAL領域にVARIANTデータ項目を含む場合の注意事項」を参照してください。
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.