25.2.5 VARIANT値とCOBOLデータのやり取り
- 〈この項の構成〉
(1) 暗黙的な変換
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.
- 例の説明
-
-
外部10進項目で項目を定義します。
-
VARIANT値を受け取ります。
-
(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.
- 例の説明
-
-
バリアントデータで項目を定義します。
-
値を取得します。
-
取得した値をそのまま別のセルに設定します。
-
(3) VARIANT値の解放
不要となったVARIANT値は,バリアントデータ項目を初期化することで,解放できます。
不要となった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.
- 例の説明
-
-
バリアントデータで項目を定義します。
-
値を設定します。
-
取得した値をそのまま別のセルに設定します。
-
バリアントデータ項目を解放します。
-
(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.
- 例の説明
-
-
バリアントデータで項目を定義します。
-
VARIANT値を取得します。
-
取得したVARIANT値の型をチェックします。
-
該当するCOBOLデータに振り分けて設定します。
-
文字型へデータが設定された場合は,長さをチェックします。
-
(5) バリアントデータ項目の設定
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.
- 例の説明
-
-
バリアントデータで項目を定義します。(1.’も同様です)。
-
CONVERT-TO-VARIANT関数で取得したVARIANT値のポインタを,1.(CDATA-VAR1)のバリアントデータ項目に設定します。
CONVERT-TO-VARIANT関数で取得した値を転記する場合,関数で一時的に作成したVARIANT値の設定領域は,転記が終了したあとに解放されます。
-
VARIANT値をコピーした領域(CDATA-VAR1)へのポインタを,1.’(CDATA-VAR2)のバリアントデータ項目に転記します。
なお,このとき受け取り側作用対象のバリアントデータ項目にVARIANT値がすでにある場合,該当するVARIANT領域は解放されます。
また,このとき送り出し側作用対象のバリアントデータ項目のポインタがNULLの場合,受け取り側作用対象のバリアントデータ項目にもNULLが転記されます。
-
(6) バリアントデータ項目にEXTERNAL句を指定する場合
バリアントデータ項目にEXTERNAL句を指定する場合については,「4.2.2 外部属性(EXTERNAL句)」の「(2) EXTERNAL領域にVARIANTデータ項目を含む場合の注意事項」を参照してください。