Creating Reports in Flat Sheet
Version Info
Minimum Origin Version Required: Origin 8 SR0
Examples
Reports vector numeric data and text via Datasheet::SetReportTree function in Worksheet class from tree to flat sheet.
void Datasheet_SetReportTree()
{
int nID = 100; // Each node must have node ID and node ID must be unique
int nTableFormat = GETNBRANCH_FIT_COL_WIDTH | GETNBRANCH_FIT_ROW_HEIGHT;
// 1. Create report tree
Tree tr;
tr.Report.ID = nID++;
tr.Report.SetAttribute(STR_LABEL_ATTRIB, "Dest Stats Report"); //Table title
// TREE_Table attribute is critical in getting the report to work so must be present in every table level.
// Can set this attribute as 0 without any format, but many bits GETNBRANCH_* defined in oc_const.h to set table display format.
tr.Report.SetAttribute(TREE_Table, nTableFormat);
// 2. Prepare the table and show values got from vectors
tr.Report.Table.ID = nID++;
TreeNode trTable = tr.Report.Table;
trTable.SetAttribute(STR_LABEL_ATTRIB, "Extreme Values"); //Table tile
trTable.SetAttribute(TREE_Table, nTableFormat | GETNBRANCH_TRANSPOSE);
// setup column 1
trTable.C1.ID = nID++;
trTable.C1.SetAttribute(STR_LABEL_ATTRIB, "Description"); // Column label
trTable.C1.SetAttribute(STR_COL_DESIGNATION_ATTRIB, OKDATAOBJ_DESIGNATION_NONE); // Set column type to None
// setup column 2
trTable.C2.ID = nID++;
trTable.C2.SetAttribute(STR_LABEL_ATTRIB, "Max Values"); // Column label
trTable.C2.SetAttribute(STR_COL_DESIGNATION_ATTRIB, OKDATAOBJ_DESIGNATION_Y); // Set column type to Y
// setup column 3
trTable.C3.ID = nID++;
trTable.C3.SetAttribute(STR_LABEL_ATTRIB, "Min Values"); // Column label
trTable.C3.SetAttribute(STR_COL_DESIGNATION_ATTRIB, OKDATAOBJ_DESIGNATION_Y); // Set column type to Y
// Put data from vector to table columns
vector<string> vsDesc = {"Data1", "Data2", "Data3", "Data4", "Data5"};
vector vMaxDatas = {100, 98, 95, 92, 84};
vector vMinDatas = {5, 9, 13, 18, 21};
trTable.C1.strVals = vsDesc;
trTable.C2.dVals = vMaxDatas;
trTable.C3.dVals = vMinDatas;
// 4. Prepare worksheet window to report
WorksheetPage wksPage;
wksPage.Create();
string strSheetName = "Report Sheet";
int nn = wksPage.AddLayer(strSheetName);
if( nn < 0 )
return;
Worksheet wksOut = wksPage.Layers(nn);
wksPage.Layers(0).Delete(); //delete the first default layer
// 5. Do report
if( wksOut.SetReportTree(tr.Report) < 0 ) // Returns last row number on successful exit and -1 on failure.
{
printf("Fail to set report tree.\n");
return;
}
wksOut.AutoSize();
}
|