Author |
Topic |
|
JLG
3 Posts |
Posted - 07/28/2010 : 10:13:39 PM
|
Using OriginPro 8.0.63.988 SR6 on Windows Vista
I'm working on an OriginC script to reprocess some data stored in origin project files. These files have subfolders which typically contain a workbook and two graph pages. One of the workbook pages has three columns, two of which I would like to access. Interestingly I am able to add the first column (and the third column, which I don't actually need) without any problem. However, the second column, for some reason, I can only properly add the data after I either display the graph in the subfolder that plots the data from that column, or look at the workbook's properties. Simply opening the workbook to that page and clicking in it does not do the trick after a fresh load of the project file. When the values are not imported properly, I get values of -1.234568E-300.
This may very well be a mistake on my part, but I have spent quite a bit of time trying to resolve the issue, and would like to see if anyone else has had a similar issue, or if anyone else can point out my mistake. Below is the code I am using:
void Testing123( double dPulseTime = 0 )
{
Folder fldSub;
PageBase pb;
Layer layer;
WorksheetPage wpCurrent;
GraphPage gp;
Worksheet wksCurrent;
DataRange drCurrent;
vector vI, vT;
fldSub = Project.ActiveFolder(); // Get the active folder
// Search each page to find desired workbook
foreach( pb in fldSub.Pages)
{
if( pb.GetType() == 2 && atof( pb.GetLongName() ) == dPulseTime ) wpCurrent = pb; // get worksheet page of interest
}
// get the desired worksheet from that page
foreach( layer in wpCurrent.Layers )
{
if( layer.GetName() == "Data" ) wksCurrent = layer;
}
drCurrent.BreakUp(); // Clear out previous data range entries
drCurrent.Add(wksCurrent, 0, "X"); // Add time column to datarange as X
drCurrent.Add(wksCurrent, 1, "Y"); // Add current column to datarange as Y
// Clear data out from vector's previous use
vT.RemoveAll();
vI.RemoveAll();
// Populate Voltage and Time vectors
drCurrent.GetData(vT, 0); // Time data
drCurrent.GetData(vI, 1); // Current Data
}
|
|
JLG
3 Posts |
Posted - 07/29/2010 : 01:11:20 AM
|
I've uploaded a sample project file which can be used to test the above function on:
http://www.mediafire.com/file/q52tmnb6q1y2oa9/Sample.opj
If I open the above file and enter a subfolder and immediately run the command "Testing123(0.05)", the data is not added to the datarange correctly for the second column in the data worksheet in the workbook contained in that folder. This can be seen using the slightly modified function below which outputs one of the values from that column which has been added to a vector. However, if I look at the workbooks properties or open up the graph in the subfolder labeled "0.0500 - Fit" and run the function again, the code works perfectly. Once it works once, it continues to work until the project is closed and reopened.
void Testing124( double dPulseTime = 0 )
{
Folder fldSub;
PageBase pb;
Layer layer;
WorksheetPage wpCurrent;
GraphPage gp;
Worksheet wksCurrent;
DataRange drCurrent;
vector vI, vT;
fldSub = Project.ActiveFolder(); // Get the active folder
// Search each page to find desired workbook
foreach( pb in fldSub.Pages)
{
if( pb.GetType() == 2 && atof( pb.GetLongName() ) == dPulseTime ) wpCurrent = pb; // get worksheet page of interest
}
// get the desired worksheet from that page
foreach( layer in wpCurrent.Layers )
{
if( layer.GetName() == "Data" ) wksCurrent = layer;
}
drCurrent.BreakUp(); // Clear out previous data range entries
drCurrent.Add(wksCurrent, 0, "X"); // Add time column to datarange as X
drCurrent.Add(wksCurrent, 1, "Y"); // Add current column to datarange as Y
// Clear data out from vector's previous use
vT.RemoveAll();
vI.RemoveAll();
// Populate Voltage and Time vectors
drCurrent.GetData(vT, 0); // Time data
drCurrent.GetData(vI, 1); // Current Data
printf("%d, %E\n", vI.GetSize(), vI[50]);
}
|
|
|
Penn
China
644 Posts |
Posted - 07/29/2010 : 06:12:57 AM
|
Hi,
It is a bug. We will try to fix it. Please try the following code.
void Testing124( double dPulseTime = 0 )
{
Folder fldSub;
PageBase pb;
Layer layer;
WorksheetPage wpCurrent;
GraphPage gp;
Worksheet wksCurrent;
// DataRange drCurrent;
XYRange xyCurrent;
vector vI, vT;
fldSub = Project.ActiveFolder(); // Get the active folder
// Search each page to find desired workbook
foreach( pb in fldSub.Pages)
{
if( pb.GetType() == 2 && atof( pb.GetLongName() ) == dPulseTime ) wpCurrent = pb; // get worksheet page of interest
//if( pb.GetType() == 2 && pb.GetLongName() == dPulseTime ) wpCurrent = pb; // get worksheet page of interest
}
// get the desired worksheet from that page
foreach( layer in wpCurrent.Layers )
{
if( layer.GetName() == "Data" ) wksCurrent = layer;
//if( layer.GetName() == "Sheet1" ) wksCurrent = layer;
}
//drCurrent.BreakUp(); // Clear out previous data range entries
//drCurrent.Add(wksCurrent, 0, "X"); // Add time column to datarange as X
//drCurrent.Add(wksCurrent, 1, "Y"); // Add current column to datarange as Y
xyCurrent.Add(wksCurrent, 0, "X");
xyCurrent.Add(wksCurrent, 1, "Y");
// Clear data out from vector's previous use
vT.RemoveAll();
vI.RemoveAll();
// Populate Voltage and Time vectors
//drCurrent.GetData(vT, 0); // Time data
//drCurrent.GetData(vI, 1); // Current Data
xyCurrent.GetData(vI, vT);
printf("%d, %E\n", vI.GetSize(), vI[50]);
}
Penn |
|
|
JLG
3 Posts |
Posted - 07/29/2010 : 1:32:58 PM
|
Thanks! Your workaround works perfectly. Is my understanding correct that XYRange is essentially a more constrained DataRange? Also, in light of this bug, should one use XYRanges instead of DataRanges where possible? |
|
|
Penn
China
644 Posts |
Posted - 07/29/2010 : 9:58:40 PM
|
Hi,
The XYRange class is derived from the DataRange class, you can see the inheritance relationships here. XYRange is for datasets with X and Y ranges, and sometimes together with Y Error. In your issue, it is fine to use XYRange.
Penn |
|
|
|
Topic |
|
|
|