DataRange::Add
Add
Description
Add a new subrange to the DataRange.
Syntax
int Add( LPCSTR lpcszName, LPCSTR lpcszRange )
int Add( LPCSTR lpcszName, Datasheet & ds, int nR1, int nC1, int nR2, int nC2 )
int Add( Datasheet & ds = NULL, int nC1 = 0, LPCSTR lpcszName = NULL, int nC2 = 0, int nR1 = 0, int nR2 = -1 )
Parameters
- lpcszName
- [input]The name of the subrange like "X", "Y", "Z", or "ED" for Y error. "X" is a general usage, if no need to specify data is XY, XYZ etc.
- Use NULL to indicate a separator ("S"). When NULL, then ds can also be NULL.
- lpcszRange
- [input]range string like "[Book1]Data1!A:A"
- lpcszName
- [input]The name of the subrange like "X", "Y", "Z", or "ED" for Y error. "X" is a general usage, if no need to specify data is XY, XYZ etc.
- Use NULL to indicate a separator ("S"). When NULL, then ds can also be NULL.
- ds
- [input]Worksheet or MatrixLayer in which range reside
- nR1
- [input]Row range begin
- nC1
- [input]Column range begin
- nR2
- [input]Row range end, use -1 to indicate end of column
- nC2
- [input]Column range end, if only one column then put in same value as nC1, if to end of worksheet use -1
- ds
- [input]Worksheet or MatrixLayer in which range reside
- nC1
- [input]Column range begin
- lpcszName
- [input]The name of the subrange like "X", "Y", "Z", or "ED" for Y error. "X" is a general usage, if no need to specify data is XY, XYZ etc.
- Use NULL to indicate a separator ("S"). When NULL, then ds can also be NULL.
- nC2
- [input]Column range end
- nR1
- [input]Row range begin
- nR2
- [input]Row range end, use -1 to indicate end of column
Return
Returns the number of subranges in the DataRange after execution.
Returns the number of subranges in the DataRange after execution.
Returns the number of subranges in the DataRange after execution.
Examples
EX1
// construt data range for one column and then get data from range object to one vector
void DataRange_Add_Ex1(int nColIndex = 0)
{
Worksheet wks = Project.ActiveLayer();
if( !wks )
{
out_str("Please keep a worksheet active with data");
return;
}
Column col(wks, nColIndex);
if( !col )
{
out_str("The specified column does not exist.");
return;
}
string strRange;
if( !col.GetRangeString(strRange) )
{
out_str("Fail to get range string.");
return;
}
DataRange dr;
dr.Add("X", strRange);
vector vData;
dr.GetData(&vData, 0);
if( vData.GetSize() > 0 )
printf("The first value of %dth column is %g\n", nColIndex+1, vData[0]);
else
printf("No data in %dth column\n", nColIndex+1);
}
EX2
// construct XY data range from worksheet columns
void DataRange_Add_Ex2()
{
Worksheet wks = Project.ActiveLayer();
if( !wks )
{
out_str("Please keep a worksheet active with data");
return;
}
Column colX(wks, 0);
Column colY(wks, 1);
if( colX && colY )
{
string strRangeX, strRangeY;
if( colX.GetRangeString(strRangeX) && colY.GetRangeString(strRangeY) )
{
XYRange dr;
dr.Add("X", strRangeX); // the range name should be X
dr.Add("Y", strRangeY); // the range name should be Y
vector vx, vy;
dr.GetData(vy, vx);
}
}
}
EX3
// construct data range from worksheet selected range
void DataRange_Add_Ex3()
{
Worksheet wks = Project.ActiveLayer();
if( !wks )
return;
int c1, c2, r1, r2;
int nRet = wks.GetSelection(c1, c2, r1, r2); // get the selected range
if( WKS_SEL_NONE == nRet )
{
out_str("No selection on active worksheet!");
return;
}
DataRange dr;
dr.Add("X", wks, r1, c1, r2, c2); //construct a data range object by selection
vector vData;
dr.GetData(vData, 0); // get data from range object
}
EX4
// get data from Origin matrix window
void DataRange_Add_Ex4()
{
MatrixLayer matLayer = Project.ActiveLayer();
if( matLayer )
{
DataRange dr;
dr.Add("X", matLayer, 0, 0, -1, -1);
matrix matData;
dr.GetData(matData);
printf("The number of row and col is %dx%d.\n", matData.GetNumRows(), matData.GetNumCols());
}
}
EX5
// put data from matrix object to Origin matrix window
void DataRange_Add_Ex5()
{
MatrixPage matPage;
matPage.Create("Origin");
MatrixLayer matLayer = matPage.Layers();
DataRange dr;
dr.Add("X", matLayer, 0, 0, -1, -1);
matrix matData = {{1,2,3}, {4,5,6}, {7,8,9}};
dr.SetData(matData);
}
EX6
// construct multiple subranges from different workbook
// Before running, please make sure there are Book1 and Book2 in current project.
void DataRange_Add_Ex6()
{
WorksheetPage wksPage1("Book1");
WorksheetPage wksPage2("Book2");
if( wksPage1 && wksPage2 )
{
Worksheet wks1 = wksPage1.Layers(-1); // get active sheet
Worksheet wks2 = wksPage2.Layers(-1);
DataRange dr;
// subrange 1
dr.Add(wks1, 0, "X");
dr.Add(wks1, 1, "Y");
// subrange 2
dr.Add(NULL); // add separator
dr.Add(wks2, 0, "X");
dr.Add(wks2, 1, "Y");
DWORD dwDataRules = DRR_GET_DEPENDENT;
vector vx1, vy1, vx2, vy2;
dr.GetData(dwDataRules, 0, NULL, NULL, &vy1, &vx1); // get xy data from the 1st subrange
dr.GetData(dwDataRules, 1, NULL, NULL, &vy2, &vx2); // get xy data from the 2nd subrange
}
}
Remark
Add a new subrange to the DataRange. The subrange is specified using a Worksheet or MatrixLayer object and beginning and ending row and a column index.
See Also
DataRange::AddInput,DataRange::SetRange
header to Include
origin.h
|