Copy Paste Cell Formatting

 

The following code shows how to get and set tables/blocks of cells of same dimension using Origin C code. You can use OriginObject::GetFormat to get the format tree of one Origin object(e.x. DataRange), save it to XML file or output it the learn more about it. Then you can use OriginObject::SetFormat to set the format to the Origin objects.

Version Info

Minimum Origin Version Required: Origin 8 SR0

Copy Format

// Define the theme file path and name.
#define      STR_THEME_FILE_PATH        GetOriginPath(ORIGIN_PATH_USER) + "wksTheme.xml"

void copy_cell_format()
{
        Worksheet wks = Project.ActiveLayer();
        if( !wks )
        {
                printf("Please keep worksheet active before running.\n");
                return;
        }
        
        int r1, c1, r2, c2;
        wks.GetSelectedRange( r1, c1, r2, c2 ); // to get the selected range
        
        DataRange dr;   
        dr.Add( "Range1", wks, r1, c1, r2, c2 ); // construct a data range object
        
        Tree tr;
        tr = dr.GetFormat( FPB_ALL, FOB_RANGE_STYLE, true, true );        
        tr.Save(STR_THEME_FILE_PATH);
}

Apply Format

void paste_cell_format()
{
        Worksheet wks = Project.ActiveLayer();
        if( !wks )
        {
                printf("Please keep worksheet active before running.\n");
                return;
        }
        
        vector<int> vR1, vC1, vR2, vC2;
        wks.GetSelectedRange( vR1, vC1, vR2, vC2 );
    Tree tr;    
        if( tr.Load(STR_THEME_FILE_PATH) )
        {                     
                for(int iRange = 0; iRange < vR1.GetSize(); iRange++)
                {                     
                        DataRange dr;
                        dr.Add( "Range1", wks, vR1[iRange], vC1[iRange], vR2[iRange], vC2[iRange] ); 
                        
                        // apply the format from drSource to drDest
                        bool bRet = dr.ApplyFormat( tr, true, true );                        
                }
        }
}