【お知らせ】この部分は英語原文のみでの提供となります。何卒ご了承ください。
3.2.6.1 Accessing Worksheet Format with Theme Tree
Contents
Version Info
Minimum Origin Version Required: Origin 8 SR0
View Format Tree
Following code show how to get/set worksheet format using Origin C code. To customize worksheet format, you may use OriginObject::GetFormat to get the format tree of one Origin object(e.x. WorksheetPage, Worksheet, Column), save it to XML file or output it the learn more about it.
View Worksheet Format Tree
void view_wks_format_tree_ex() { Worksheet wks = Project.ActiveLayer(); if(!wks) return; Tree trFormat; trFormat = wks.GetFormat(FPB_ALL, FOB_ALL, TRUE, TRUE); //out_tree(trFormat); // output format tree string strSaveTo = GetAppPath(false) + "WksFormatTree.xml"; if(trFormat.Save(strSaveTo)) out_str("Format Tree xml file saved to "+strSaveTo); }
View Column Format Tree
void view_format_tree_ex() { Worksheet wks = Project.ActiveLayer(); if(!wks) return; Column col(wks, 1); if(!col) return; Tree trFormat; trFormat = col.GetFormat(FPB_ALL, FOB_ALL, TRUE, TRUE); //out_tree(trFormat); // output format tree string strSaveTo = GetAppPath(false) + "ColFormatTree.xml"; if(trFormat.Save(strSaveTo)) out_str("Format Tree xml file saved to "+strSaveTo); }
Set Merge for Units/Comments/Long Name
This example used to control the dynamic merge of Column Labels in Worksheet when labels contain same contents. Keep worksheet is active and run SetLabelMerge "LongName".
// strLabelType can be LongName, Unit, Comment, SampleRate, Param, Data, UDL(for user defined label) void set_label_merge_ex(string strLabelType = "Param") { Worksheet wks = Project.ActiveLayer(); if( !wks ) return; Tree trFormat; trFormat = wks.GetFormat(FPB_ALL, FOB_ALL, TRUE, TRUE); string strName = "og" + strLabelType; TreeNode trNameStyles = trFormat.Root.Grid.NameStyles; bool bRet = false; // to find the NameStyle node for the specified column label foreach(TreeNode trNameStyle in trNameStyles.Children) { if( 0 == trNameStyle.Name.strVal.Compare(strName) ) { bRet = true; // found break; } } if(!bRet) // not found, please check input strLabelType if correct return; trNameStyle.Style.Merge.nVal = GMC_HORZ; // GMC_NONE(0), GMC_HORZ(1), GMC_VERT(2), GMC_BOTH(3) if( 0 != wks.UpdateThemeIDs(trFormat) ) //0 for no error return; bool bUndo = true; bRet = wks.ApplyFormat(trFormat, true, true, bUndo); if(!bRet) out_str("Fial to apply format"); }
Set Row Height
- n1, n2 can be negative, 0 or positive. 0 means the first data row, 1 means the second data row, -1 means last column lable row.
- For example, one worksheet has 3 Column Labels: Long Name, Units, Comments and want to set the height of Comments Label to 3, then run the following function like SetRowHeight(-1, -1, 3).
- nNewHeight is the new height you want to set.
#define DEFAULT_WKS_ROW_HEIGHT 100 void set_row_height_ex(int n1, int n2, int nNewHeight) { Worksheet wks = Project.ActiveLayer(); if( !wks ) return; Tree tr; tr = wks.GetFormat(FPB_DIMENSION, FOB_DIMENSION, TRUE, TRUE); // the current size vector<int> vn; TreeNode trSize = tr.Root.Grid.Dimensions.Vertical.Size; if( trSize ) vn = trSize.nVals; else return; // get the state of lables vector<int> vnShowTypes; Grid grid; if(grid.Attach(wks)) grid.GetShowLabels(vnShowTypes, true); // true for row int nLabelOffset = vnShowTypes.GetSize() + 1;//1: column header int nRow = nLabelOffset + n2, nCount = vn.GetSize(); if(nRow >= nCount) { vector<int> vnAppend; vnAppend.SetSize(nRow + 1 - nCount); vnAppend = DEFAULT_WKS_ROW_HEIGHT; // default is 100 vn.Append(vnAppend); } nNewHeight = nNewHeight * DEFAULT_WKS_ROW_HEIGHT; for(int ii = n1; ii <= n2; ii++) vn[nLabelOffset + ii] = nNewHeight; Tree trTemp; trTemp.Root.Grid.Dimensions.Vertical.Size.nVals = vn; if( 0 != wks.UpdateThemeIDs(trTemp.Root) ) //0 for no error return; bool bUndo = true; bool bRet = wks.ApplyFormat(trTemp, true, true, bUndo); if(!bRet) out_str("Fial to apply format"); }
Set Row Header Width
This example asign the value nWidth (width in characters approximate) to the Row Header Width in active worksheet.
void rhWidth(int nWidth) { Worksheet wks = Project.ActiveLayer(); Tree tr; vector<int> vec; vec.Add(nWidth); tr.Root.Grid.Dimensions.Horizontal.Size.nVals=vec; wks.UpdateThemeIDs(tr.Root); wks.ApplyFormat(tr, true, true); }