JCL_lst_copy

配列方リストボックスの内容をコピーバッファに送る。Excelやエディタを開いて、ペーストするとリストボックスの内容がペーストされる。ヘッダとフッターに対応。フッターは数値または文字列をサポート。

フッターは非表示なら出力しない。

文法

JCL_lst_Copy(->vKO01_lstKO)

$1:リストボックスへのポインタ
戻り値$0:なし

  //JCL_lst_Copy
  //20190129 wat
  // 汎用のリストボックス コピー すべての
  //20200602 wat 非表示列は出力しない。最後のタブは取り除く
  //20210914 wat フッターも出力
  //20210923 wat フッター出力をStringに変換
  //20220626 フッター非表示ならフッター出力しない

C_POINTER($1;$lstbxPtr)
$lstbxPtr:=$1
C_TEXT($buf)
$buf:=" "  // 20140923 「ID」という文字がファイルの先頭にあるとエクセルがSYLKファイルと勘違いするため先頭に空白を出力
C_TEXT($tabChar;$crChar)
$tabChar:=Char(Tab)
$crChar:=Char(Carriage return)+Char(Line feed)
$crChar:=Char(Line feed)  //20170222
C_LONGINT($numOfCols;$numOfRows;$col;$row)

  // 列数、行数を求める
$numOfCols:=LISTBOX Get number of columns($lstbxPtr->)
$numOfRows:=LISTBOX Get number of rows($lstbxPtr->)

ARRAY TEXT($aryColNames;0)
ARRAY TEXT($aryHeaderNames;0)
ARRAY POINTER($aryColVars;0)
ARRAY POINTER($aryHeaderVers;0)
ARRAY BOOLEAN($aryColsVisible;0)
ARRAY POINTER($aryStyles;0)
ARRAY TEXT($aryFooterNames;0)
ARRAY POINTER($aryFooterVers;0)
C_LONGINT($footer_visible)

LISTBOX GET ARRAYS($lstbxPtr->;$aryColNames;$aryHeaderNames;$aryColVars;$aryHeaderVers;$aryColsVisible;\
$aryStyles;$aryFooterNames;$aryFooterVers)

  // ヘッダを出力
For ($col;1;$numOfCols)
	  //非表示列は出力しない
	If ($aryColsVisible{$col}=True)
		$str:=OBJECT Get title(*;$aryHeaderNames{$col})
		$buf:=$buf+$str+$tabChar
	End if 
	
	  //最後の列は最後のタブ文字を取り除いて改行を追加
	If ($col=$numOfCols)
		$buf:=Substring($buf;1;Length($buf)-1)
		$buf:=$buf+$crChar
		
	End if 
End for 

  // ボディを出力
For ($row;1;$numOfRows)
	
	For ($col;1;$numOfCols)
		  //非表示列は出力しない
		If ($aryColsVisible{$col}=True)
			$str:=String($aryColVars{$col}->{$row})  // データ型によってはエラーになる可能性がある
			$buf:=$buf+$str+$tabChar
		End if 
		
		  //最後の列は最後のタブ文字を取り除いて改行を追加
		If ($col=$numOfCols)
			$buf:=Substring($buf;1;Length($buf)-1)
			$buf:=$buf+$crChar
			
		End if 
	End for 
End for 

  // フッターを出力 20210914 //20220626 非表示なら出力しない
$footer_visible:=LISTBOX Get property($lstbxPtr->;lk display footer)
If ($footer_visible=1)
	For ($col;1;$numOfCols)
		  //非表示列は出力しない
		If ($aryColsVisible{$col}=True)
			$str:=String($aryFooterVers{$col}->)  // データ型によってはエラーになる可能性がある 20210923
			$buf:=$buf+$str+$tabChar
		End if 
		
		  //最後の列は最後のタブ文字を取り除いて改行を追加
		If ($col=$numOfCols)
			$buf:=Substring($buf;1;Length($buf)-1)
			$buf:=$buf+$crChar
			
		End if 
	End for 
End if 

  //最後の改行をとる 20220626
$buf:=Substring($buf;1;Length($buf)-1)

SET TEXT TO PASTEBOARD($buf)

リストボックスに表示されている文字列をタブと改行で区切りながらバッファに追記していき、最後にペーストボードに転送する、というロジック。このような仕様のためリストの行が多いとバッファのリアロケートが繰り返し実行されて遅くなる。そのような場合は書き出し「JCL_lst_Export_pgs2」をお勧めする。