エクスポート

グラフやデータ、動画のエクスポートを行うLabTalkスクリプトのサンプルです。

  1. グラフをエクスポート
    1. プロジェクトエクスプローラと同様のフォルダ階層にエクスポートする
  2. データをエクスポート
    1. 全フォルダの全ブック中の全シートをテキストファイルとしてエクスポート
  3. 動画をエクスポート

グラフをエクスポート

プロジェクトエクスプローラと同様のフォルダ階層にエクスポートする

プロジェクトのフォルダ構造と同様のサブフォルダ階層を作成して、グラフをグラフウィンドウのロングネームをファイル名として、それぞれ該当するフォルダにエクスポートする方法を紹介します。

Origin 2016以降の場合

doc -e P
{
  if(page.IsEmbedded==0&&exist(%H)!=11) // 埋め込みグラフやレイアウトウィンドウはスキップ
    {
      window -a %H; // グラフウィンドウをアクティブにする
      string a$=%X; // プロジェクトが保存されているパスを取得
      string b$=%@P; // グラフのプロジェクトパスを取得
      b.Replace("/","\"); // パス表記を修正
      i=b.delete(1); // 1文字目を削除
      string path$=a$+b$; // 文字列を結合してエクスポートフォルダパスを作成
      expGraph type:=jpg filename:="<long name>" path:=path$ theme:=<Original> tr.Margin:=2;
    }
}

Origin 2015以前の場合

pe_cd /; // ルートディレクトリに移動
string root_folder$;
pe_path path:=root_folder$; // ディレクトリパスを取得
//type root_folder$;
int cs=%[root_folder$]; // パス長を取得
cs=cs+2; // スペースなどのために2足す
//cs=;
doc -e P // すべてのグラフオブジェクトをループ
{
	if(page.IsEmbedded==0&&exist(%H)!=11)  // 埋め込みグラフやレイアウトウィンドウはスキップ
	{
		string proj_path$=%X; // プロジェクトが保存されているWindowsパスを取得
		//type "the project path is:"+proj_path$;
		window -a %H;	
		string graph_fullPath$;
		pe_path path:=graph_fullPath$; // グラフのプロジェクトエクスプローラパスを取得
		%A=graph_fullPath$;
		string graph_path$=%[%A,>cs]; // パスからルートフォルダを削除
		//type "the graph path is:"+graph_path$;
		//type "graph title is:"+%H;
		string path$=proj_path$+graph_Path$; // 文字列を結合してエクスポートフォルダ作成
		path.Replace("/","\");
		expGraph type:=jpg filename:="<long name>" path:=path$ theme:=<Original> tr.Margin:=2;
	};
}

データをエクスポート

全フォルダの全ブック中の全シートをテキストファイルとしてエクスポート

全フォルダの全ワークブック中の全てのシートをテキストファイルとしてエクスポートします。その際、テキストファイル名を "ワークブック名_ワークシート名" のように設定します。

fdlog.openpath(B); // ファイルを保存するディレクトリを選択
 
doc -e W{   // プロジェクト内のワークブックすべてにループ
 
       doc -e LW // ワークブック内のワークシートすべてにループ
            {
              string temp$ = wks.name$; // ワークシートショートネームを取得
           // string temp$ = wks.longname$; // ワークシートロングネームを取得する場合この行を実行
              expASC type:=text path:=%B%H_%(temp$) shortname:=1; // .txtファイルとしてエクスポート
            };
}

アクティブフォルダにループする場合、doc -e Wdoc -ef W に置き換えます。

動画をエクスポート

必要なOriginのバージョン:9.0 SR0

このサンプルでは、新しい行列ブックを作成し、値を設定して等高線図として作図します。これを50回繰り返し、その都度、行列値を調整してグラフを更新します。作成されたグラフは毎回動画の1フレームとして追加されます。完了したら、50フレーム分の動画が作成されます。

このサンプルでは、リアルタイムにグラフを変更する方法と、LabTalkスクリプトにvw_オブジェクトを使用して動画を作成する方法を紹介します。(Cドライブ直下のtempというフォルダに保存するようにしています。ない場合は作成してから実行してください)

// 行列ウィンドウを作成
string matbk$;
newbook mat:=1 result:=matbk$;
 
// シート内の行列オブジェクトを指定
range rmat = [matbk$]1!1;
 
// 次数、値をセットして等高線図を作成
mdim c:=100 r:=100;
double a=1; 
string formula$; formula$="i*sin(a*x)-j*cos(y/a)"; 
msetvalue im:=rmat formula:=formula$; 
wo -p 226 contour; 
 
// 等高線図を編集
layer.cmap.zmin=-250;
layer.cmap.zmax=250;
layer.cmap.nummajorlevels=10; 
layer.cmap.numminorlevels=9;
layer.cmap.setlevels(1); 
layer.cmap.updatescale(); 
layer.cmap.load(Rainbow.PAL);
 
// コーデックを選択
// 4文字コードで指定(マシンにより利用可能なコーデックが異なるので注意)
// 以下はサンプル
int codec = vw.FourCC(0, 0, 0, 0); // 無圧縮
//int codec = vw.FourCC(1, 0, 0, 0); // Microsoft連長圧縮
//int codec = vw.FourCC('c', 'v', 'i', 'd'); // Cinepak
//int codec = vw.FourCC('F', 'M', 'P', '4'); // MPEG4
 
// ビデオを作成 (ファイル名, コーデック, フレーム毎秒, 幅, 高さ)
int err = vw.Create(c:\temp\test.avi, codec, 15, 1024, 768);
if( 0 == err )
{
	for( a=1; a<=1.5; a+=0.01 )
	{
		%C -= 1;
		formula$="i*sin(a*x)-j*cos(y/a)+grnd()";
		msetvalue im:=rmat formula:=formula$;
 
		// グラフウィンドウが再描画されるのを待つ
		// これにより動画ファイル作成中に動画を確認できる
		sec -pw %h;
 
		// グラフを1つのフレームとして動画に書き込む
		err = vw.WriteGraph();
		if( err )
			break;
	}
 
	// リリース
	vw.Release();
 
	if( err )
		type "WriteGraph error $(err)";
}
else
	type "VideoWriter Create error $(err).";

その他のスクリプトサンプル

 

page_top_icon