行列シートとワークシートは、Originオブジェクト構造でのレベルが同じため、このセクションのサンプルは、ワークシートの基本操作の章で紹介しているものと似通っています。
AddLayerメソッドを使用して、行列ブック内の行列シートを追加します。
// "MBook1"という名前の行列ブックにアクセス MatrixPage mp("MBook1"); // 行列ブックに新しいシートを追加 int index = mp.AddLayer("New Matrix Sheet"); // 新しい行列シートにアクセス MatrixLayer mlayerNew = mp.Layers(index);
set_active_layer を使用できます。
行列ブック内のシートをアクティブにするには、関数// フルネームで行列シートにアクセス MatrixLayer mLayer("[MBook1]MSheet1"); // この行列シートをアクティブに設定 set_active_layer(mLayer);
Destroy メソッドを使用して行列シートを削除します。
MatrixLayer ly = Project.ActiveLayer(); if( ly ) // アクティブレイヤが行列シートの場合 ly.Destroy(); // 行列シートを削除
ワークブック内のワークシートにアクセスするのと同様、行列ブック内の行列シートへは以下の方法によりアクセスできます。
// 行列シートのフルネーム string strFullName = "[MBook1]MSheet1!"; // 行列シートのインスタンスを構成し、名前を付けたシートを付加 MatrixLayer matLy1(strFullName); // 名前付きシートに既存行列のインスタンスを付加 matLy2.Attach(strFullName);
MatrixPage matPage("MBook1"); foreach(Layer ly in matPage.Layers) out_str(ly.GetName());
// ページ MBook1には、最低でも2つの行列シートがあると仮定 // それらのシート名は、MSheet1 と MSheet2 MatrixPage matPage("MBook1"); MatrixLayer lyFirst = matPage.Layers(0); //インデックスによる MatrixLayer lySecond = matPage.Layers("MSheet2"); //名前による
Originでは、行列シート内のすべての行列オブジェクトは同じ次数(列と行の数が同じ)を共有します。
// 行と列の数を取得 MatrixLayer ml = Project.ActiveLayer(); // アクティブ行列シートを取得 MatrixObject mo = ml.MatrixObjects(0); // 第1行列オブジェクトを取得 int nNumRows = mo.GetNumRows(); // 行数を取得 int nNumCols = mo.GetNumCols(); // 列数を取得
// 行と列の数を設定 MatrixLayer ml = Project.ActiveLayer(); // アクティブ行列シートを取得 ml.SetSize(-1, 5, 5); //次数を 5x5 に設定
// 行と列の数を設定 MatrixLayer ml = Project.ActiveLayer(); // アクティブな行列シートを取得 MatrixObject mo = ml.MatrixObjects(0); // 第1オブジェクトを取得 int nNumRows = 5, nNumCols = 5; mo.SetSize(nNumRows, nNumCols); // 次数を 5x5 に設定
MatrixLayer ml = Project.ActiveLayer(); // アクティブレイヤを取得 MatrixObject mo = ml.MatrixObjects(0); // 第1行列オブジェクトを取得 mo.SetXY(-10, 20, -2.3, 12.4); // Xを -10 から 20 にし、Yを -2.3 から 12.4 に設定
行列のラベルには、X、Y、Zに対するロングネーム、単位、コメントが含まれます。XとYのラベルは、行列シート内の全行列オブジェクトで共通で、Zのラベルは各行列オブジェクトで固有です。次のコードは、ラベルの取得と設定の方法を示しています。
MatrixPage mp("MBook1"); MatrixLayer ml = mp.Layers(0); // 第1行列シート Tree tr; tr.Root.Dimensions.X.LongName.strVal = "X Values"; tr.Root.Dimensions.X.Unit.strVal = "X Units"; tr.Root.Dimensions.X.Comment.strVal = "X Comment"; tr.Root.Dimensions.Y.LongName.strVal = "Y Values"; tr.Root.Dimensions.Y.Unit.strVal = "Y Units"; tr.Root.Dimensions.Y.Comment.strVal = "Y Comment"; // XYラベルのための行列シート上でフォーマットをセット if( 0 == ml.UpdateThemeIDs(tr.Root) ) ml.ApplyFormat(tr, true, true);
MatrixPage mp("MBook1"); MatrixLayer ml = mp.Layers(0); // 第1行列シート // 行列オブジェクトではなく行列シートのXYラベルを取得 Tree tr; tr = ml.GetFormat(FPB_ALL, FOB_ALL, TRUE, TRUE); TreeNode trX = tr.Root.Dimensions.X; if( !trX.LongName.IsEmpty() ) printf("X Long Name: %s\n", trX.LongName.strVal); if( !trX.Unit.IsEmpty() ) printf("X Unit: %s\n", trX.Unit.strVal); if( !trX.Comment.IsEmpty() ) printf("X Comment: %s\n\n", trX.Comment.strVal); TreeNode trY = tr.Root.Dimensions.Y; if( !trY.LongName.IsEmpty() ) printf("Y Long Name: %s\n", trY.LongName.strVal); if( !trY.Unit.IsEmpty() ) printf("Y Unit: %s\n", trY.Unit.strVal); if( !trY.Comment.IsEmpty() ) printf("Y Comment: %s\n", trY.Comment.strVal);
MatrixPage mp("MBook1"); MatrixLayer ml = mp.Layers(0); // 第1行列シート MatrixObject mo = ml.MatrixObjects(0);// 第1行列オブジェクト // フォーマットツリーを構成して文字列値をツリーノードに割り当て Tree tr; tr.Root.LongName.strVal = "Z Long Name"; tr.Root.Unit.strVal = "Z Units"; tr.Root.Comment.strVal = "Z Comment"; // 行列シートではなく、行列オブジェクトにZラベルを適用 if( 0 == mo.UpdateThemeIDs(tr.Root) ) // 各ツリーノードのIDを追加 mo.ApplyFormat(tr, true, true); // 適用
MatrixPage mp("MBook1"); MatrixLayer ml = mp.Layers(0); // 第1行列シート MatrixObject mo = ml.MatrixObjects(0); Tree tr; tr = mo.GetFormat(FPB_ALL, FOB_ALL, TRUE, TRUE); printf("Z Short Name: %s\n", tr.Root.ShortName.strVal); if( !tr.Root.LongName.IsEmpty() )// 空でない場合 printf("Z Long Name is %s\n", tr.Root.LongName.strVal); if( !tr.Root.Unit.IsEmpty() ) printf("Z Unit is %s\n", tr.Root.Unit.strVal); if( !tr.Root.Comment.IsEmpty() ) printf("Z Comment is %s\n", tr.Root.Comment.strVal);
テーマツリーを使用して、プログラムで行列シートをフォーマットできます。
次のサンプルは、アクティブ行列シートないのセルブロックをフォーマットし、背景を青色、テキストを明るい深紅色にします。
MatrixLayer ml = Project.ActiveLayer(); Tree tr; tr.Root.CommonStyle.Fill.FillColor.nVal = SYSCOLOR_BLUE; tr.Root.CommonStyle.Color.nVal = SYSCOLOR_LTMAGENTA; DataRange dr; dr.Add(NULL, ml, 2, 2, 5, 3); // 第1行、列、最後の行、列 if( 0 == dr.UpdateThemeIDs(tr.Root) ) dr.ApplyFormat(tr, TRUE, TRUE);
次のサンプルでは、せるのテキスト色を取得して設定します。
// 単純なユーティリティ関数に 'set' コードを内包 bool setCellTextColor(Datasheet& ds, int row, int col, uint color) { Grid grid; if( !grid.Attach(ds) ) return false; vector<uint> vTextColor(1); vTextColor[0] = color; return grid.SetCellTextColors(vTextColor, col, row, row); } // シンプルなユーティリティ関数に 'get' コードを内包 bool getCellTextColor(Datasheet& ds, int row, int col, uint& color) { Grid grid; if( !grid.Attach(ds) ) return false; vector<uint> vTextColor; if( !grid.GetCellTextColors(vTextColor, col, row, row) ) return false; color = vTextColor[0]; return true; } // 上述のユーティリティ関数をテストするためのシンプルな関数 void testCellTextColor(int nRow = 3, int nCol = 4) { MatrixLayer ml = Project.ActiveLayer(); // nRow, nCol は LT/GUI インデックス, 1-offsetを使用するが OC は 0-offset int row = nRow-1, col = nCol-1; setCellTextColor(ml, row, col, SYSCOLOR_BLUE); uint color; getCellTextColor(ml, row, col, color); printf("color == %d\n", color); }