集計表のクラス

集計表のクラス

TableView は、表を表示するビューを表すクラスで 、ViewSchedule と PanelScheduleView の基本クラスです。1 つまたは複数のセクションからなる、関連付けられた TableData クラスがあります。ViewSchedule の場合、ヘッダとボディ セクションはそれぞれ 1 つしかありません。

TableSectionData クラスは、行と列に配列されたセルの連続したセットを表します。ViewSchedule の場合、TableSectionData のセル内容は ScheduleDefinition とパラメータから生成されます。また、ViewSchedule の場合、ヘッダ セクションには読み込みと書き込み権限がありますが、ボディ セクションは読み込み専用です。

集計表のデータを使用して作業する

表の実際のデータは TableData クラスに含まれます。TableData オブジェクトは TableView クラスから直接取得できませんが、両方の子クラスには、GetTableData()メソッドがあります。ViewSchedule の場合、このメソッドは TableData オブジェクトを返します。PanelScheduleView の場合は、GetTableData は、PanelScheduleData オブジェクトを返します。これは TableData 基本クラスから作成します。TableData クラスは、表の行、列、セルのスタイルを記述するデータの大部分を保持します。PanelScheduleData は、特にパネル集計表に関する追加メソッドを提供します。

行、列、セルを使用して作業する

表のデータはセクションに分かれています。TableData の行、列、セルで 作業するには、TableSectionData オブジェクトを取得する必要があります。TableData.GetSectionData()は、要求されたセクション データに対して整数で、または SectionType (Header または Body)を使用するかのいずれかで呼び出すことができます。

TableSectionData クラスを使用して、行または列、セルの書式設定を挿入または削除したり、セル タイプ(文字またはグラフィックス)またはセルのカテゴリの ID など、集計表のセクションを構成するセルの詳細を取得します。

次の例では、新しい行が集計表の見出しセクションに追加され、テキストが新しく作成されたセルに設定されています。ユーザ インタフェースで作成されたときのタイトルには、見出しセクションの既定の最初の行に注意してください。

コード領域: 行を挿入

public void CreateSubtitle(ViewSchedule schedule)
{
    TableData colTableData = schedule.GetTableData();

    TableSectionData tsd = colTableData.GetSectionData(SectionType.Header);
    tsd.InsertRow(tsd.FirstRowNumber + 1);
    tsd.SetCellText(tsd.FirstRowNumber + 1, tsd.FirstColumnNumber, "Schedule of column top and base levels with offsets");
}

また上記のコード サンプルでは、FirstColumnNumber および FirstRowNumber プロパティを使用します。一部のセクションでは、行または列の番号が 0 または 1 から始まる場合があります。これらのプロパティは、常にハードコード化された 0 または 1 の代わりに使用する必要があります。

次の例では、カスタム ヘッダ セクションを持つ、単一カテゴリの新しい集計表を作成します。

コード領域: ヘッダ セクションのカスタマイズ

public static void CreateSingleCategoryScheduleWithSimpleHeaderSection(Document doc)
{
    using (Transaction t = new Transaction(doc, "Create single-category with custom headers"))
    {
        // Build schedule
        t.Start();
        ViewSchedule vs = ViewSchedule.CreateSchedule(doc, new ElementId(BuiltInCategory.OST_Windows));

        AddRegularFieldToSchedule(vs, new ElementId(BuiltInParameter.WINDOW_HEIGHT));
        AddRegularFieldToSchedule(vs, new ElementId(BuiltInParameter.WINDOW_WIDTH));
        AddRegularFieldToSchedule(vs, new ElementId(BuiltInParameter.ALL_MODEL_MARK));
        AddRegularFieldToSchedule(vs, new ElementId(BuiltInParameter.ALL_MODEL_COST));

        doc.Regenerate();

        // Get header section
        TableSectionData data = vs.GetTableData().GetSectionData(SectionType.Header);

        int rowNumber = data.LastRowNumber;
        int columnNumber = data.LastColumnNumber;

        // Get the overall width of the table so that the new columns can be resized properly
        double tableWidth = data.GetColumnWidth(columnNumber);

        data.InsertColumn(columnNumber);
        data.InsertColumn(columnNumber);

        // Refresh data to be sure that schedule is ready for text insertion
        vs.RefreshData();

        //Set text to the first header cell
        data.SetCellText(rowNumber, data.FirstColumnNumber, "Special Window Schedule Text");

        // Set width of first column
        data.SetColumnWidth(data.FirstColumnNumber, tableWidth / 3.0);

        //Set a different parameter to the second cell - the project name
        data.SetCellParamIdAndCategoryId(rowNumber, data.FirstRowNumber + 1, new ElementId(BuiltInParameter.PROJECT_NAME),
                                            new ElementId(BuiltInCategory.OST_ProjectInformation));
        data.SetColumnWidth(data.FirstColumnNumber + 1, tableWidth / 3.0);

        //Set the third column as the schedule view name - use the special category for schedule parameters for this
        data.SetCellParamIdAndCategoryId(rowNumber, data.LastColumnNumber, new ElementId(BuiltInParameter.VIEW_NAME),
                                            new ElementId(BuiltInCategory.OST_ScheduleViewParamGroup));
        data.SetColumnWidth(data.LastColumnNumber, tableWidth / 3.0);

        t.Commit();
    }
}

public static void AddRegularFieldToSchedule(ViewSchedule schedule, ElementId paramId)
{
    ScheduleDefinition definition = schedule.Definition;

    // Find a matching SchedulableField
    SchedulableField schedulableField =
        definition.GetSchedulableFields().FirstOrDefault<SchedulableField>(sf => sf.ParameterId == paramId);

    if (schedulableField != null)
    {
        // Add the found field
        definition.AddField(schedulableField);
    }
}

行、列、または個別のセルのスタイルは、集計表用にカスタマイズすることができます。これには、セルのすべての 4 面の境界線のスタイルや、セルの色、文字の外観(色、フォント、文字サイズ)を設定する機能が含まれています。標準の集計表では、これは、表の見出しセクションでのみ行うことができます。

下の例では、ViewSchedule (見出しセクションの 2 番目の行と想定)のサブタイトルのフォントを太字に、フォント サイズを 10 に設定しています。

コード領域: セルの書式設定

public void FormatSubtitle(ViewSchedule colSchedule)
{
    TableData colTableData = colSchedule.GetTableData();

    TableSectionData tsd = colTableData.GetSectionData(SectionType.Header);
    // Subtitle is second row, first column
    if (tsd.AllowOverrideCellStyle(tsd.FirstRowNumber + 1, tsd.FirstColumnNumber))
    {
        TableCellStyle tcs = new TableCellStyle();
        TableCellStyleOverrideOptions options = new TableCellStyleOverrideOptions();
        options.FontSize = true;
        options.Bold = true;
        tcs.SetCellStyleOverrideOptions(options);
        tcs.IsFontBold = true;
        tcs.TextSize = 10;
        tsd.SetCellStyle(tsd.FirstRowNumber + 1, tsd.FirstColumnNumber, tcs);
    }
}