ワークシート列操作

ワークシート列の操作を行うには、 Column クラスかWorksheet クラスを使用します。

列の追加及び挿入

ワークシートの最後に新しい列を追加する場合、Worksheet クラスのAddColメソッドを使用し、指定した位置の直前に列を挿入するときはInsertColを使用します。

// デフォルト名で列を追加
int nColIndex = wks.AddCol();

// strNameという名前の列を追加;
int nColIndex = wks.AddCol("AA", strName); // 列のインデックスを返す
// AAという名前の列が既にある場合、自動で名付け
out_str(strName); 
Column col(wks, nColIndex); // 列インデックスで列オブジェクトを構築


// 新しい列を1列目として挿入
int nPos = 0; // 挿入する位置
string strNewCreated; // 新しい列の名前
// MyColという列名が既にある場合は、自動で名付け
if( wks.InsertCol(nPos, "MyCol", strNewCreated) )
{
        printf("Insert column successfully, name is %s\n", strNewCreated);
}

列を削除

Worksheet::DeleteColメソッドはワークシートから列を削除する事ができます。

// インデックスで列を削除
wks.DeleteCol(0);

列の名前を変更する・ラベルを付ける

列の名前(ショートネーム)を変更するには、SetNameメソッドを使用します。

Column col = wks.Columns(0);  //ワークシート内の1列目を取得
BOOL bRet = col.SetName("MyNewName");  // 列の名前を変更

ワークシート列ラベルには、ロングネーム、単位、コメント、パラメータ、ユーザ定義ラベル等がサポートされています。Origin Cコードでラベルの表示/非表示や、特定の列ラベルにテキストを追加できます。

Worksheet wks;
wks.Create();    
 
Grid gg;
gg.Attach(wks);
 
// パラメータラベルが非表示の場合、表示する
bool bShow = gg.IsLabelsShown(RCLT_PARAM);
if( !bShow )
        gg.ShowLabels(RCLT_PARAM);
 
wks.Columns(0).SetLongName("X Data");
wks.Columns(1).SetLongName("Y Data");
 
wks.Columns(0).SetComments("This is a test");
 
wks.Columns(0).SetUnits("AA");
wks.Columns(1).SetUnits("BB");
 
// 2列のパラメータラベルにテキストを入力
wks.Columns(0).SetExtendedLabel("Param A", RCLT_PARAM);
wks.Columns(1).SetExtendedLabel("Param B", RCLT_PARAM);

RCLT_PARAM は、パラメータ列ラベルタイプです。他のタイプについては、OriginC\system\oc_const.h の ROWCOLLABELTYPE enumを確認してください。

列の表示/非表示

列を表示/非表示にするには、Workhseet::ShowCol メソッドを使用します。

wks.ShowCol(1, 1, false); // 列1を非表示にする

列の移動と交換

列を移動したり交換する場合、Worksheetクラス、DatasheetクラスがMoveColumnsメソッドと[[OriginC:Datasheet-SwapColumns|SwapColumns]を提供しています

// 3列移動 - 列5を最初の列へ
// このサンプルでは最低限7列あるワークシートが必要
Worksheet wks = Project.ActiveLayer();
if(wks)
    wks.MoveColumns(4, 3, MOVE_COL_TO_FIRST);

// アクティブワークシートの列の順番を逆に
for(int ii = 1; ii <= wks.GetNumCols() / 2 ; ii++)
    wks.SwapColumns(ii - 1, wks.GetNumCols() - ii);

列にスパークラインを追加

列にスパークラインを追加するために、Origin CではRCLT_SPARKLINEラベルタイプのwks_set_show_labels が提供されています。

// サンプリング間隔とスパークラインを表示するためにアクティブワークシートを構成
// 現在のラベルに追加
Worksheet wks = Project.ActiveLayer();
vector<int> vn = {RCLT_SAMPLE_RATE, RCLT_SPARKLINE}; 
wks_add_show_labels(wks, vn, false);

属性、フォーマット、サブフォーマット

属性の取得と設定

Worksheet wks = Project.ActiveLayer();	
Column col(wks, 0);

// 列タイプを取得
// 0: Y
// 1: 無属性
// 2: Yエラー
// 3: X
// 4: L
// 5: Z
// 6: Xエラー
int nType = col.GetType();
out_int("Type: ", nType);
// 列属性を設定。 OKDATAOBJ_DESIGNATION_* in oc_const.h 参照
col.SetType(OKDATAOBJ_DESIGNATION_Z);

データフォーマットの取得と設定

// データフォーマットを取得して設定
// 列のデフォルトフォーマットは、  OKCOLTYPE_TEXT_NUMERIC
// 列のフォーマットを日付に変更
if( OKCOLTYPE_DATE != col.GetFormat() )
{
	col.SetFormat(OKCOLTYPE_DATE);
}

データサブフォーマットの取得と設定

// データサブフォーマットの取得と設定
// サブフォーマットのオプションは、フォーマットのタイプ
// 数値、日付、時間などに応じて異なる
if( LDF_YYMMDD != col.GetSubFormat() )
{
	col.SetSubFormat(LDF_YYMMDD);
}