1.4.3 Accessing OGW


These examples show how to create a workbook, add data and meta data to the workbook, and save the workbook to an OGW file. After saving the workbook to an OGW file the workbook is destroyed. Then a new workbook is created using the OGW file. The data and meta data is read from the created workbook.

Examples

VBA

    ' This code references Origin or OrgLab8 and Microsoft XML v2.6

    ' This example expects write access to C:
    ' If you do not have write access to C: then
    ' change the fileName assignment below to a drive with write access.
    Dim fileName As String
    fileName = "C:\testBook.ogw"

    ' Connect to Origin
    Dim orig As Origin.Application
    Set orig = New Origin.Application
    If orig Is Nothing Then
        MsgBox ("Failed to connect to Origin.")
        Exit Sub
    End If

    ' Create a new workbook
    Dim workBookName As String
    workBookName = orig.CreatePage(2, "", "Origin")
    
    ' Put data into the worksheet
    Dim i As Integer
    Dim data(1 To 32, 1 To 2) As Double
    For i = 1 To 32
        data(i, 1) = i
        data(i, 2) = i * 1.012
    Next
    If Not orig.PutWorksheet("", data) Then
        MsgBox ("Failed to put data into worksheet.")
        Exit Sub
    End If
    
    ' Create some metadata
    Dim xml As MSXML2.DOMDocument
    Set xml = New MSXML2.DOMDocument

    Dim xmlOrigin As MSXML2.IXMLDOMElement
    Set xmlOrigin = xml.appendChild(xml.createElement("OriginStorage"))

    Dim xmlData As MSXML2.IXMLDOMElement
    Set xmlData = xmlOrigin.appendChild(xml.createElement("Color"))
    xmlData.Text = "Blue"
    Set xmlData = xmlOrigin.appendChild(xml.createElement("Length"))
    xmlData.Text = "42"

    ' Put metadata into the workbook page
    Dim Workbook As Origin.WorksheetPage
    Set Workbook = orig.ActivePage
    If Workbook Is Nothing Then
        MsgBox ("Failed to get workbook.")
        Exit Sub
    End If
    If Not Workbook.SetMetaData(xmlOrigin.xml, "UserBookInfo", True) Then
        MsgBox ("Failed to set metadata into workbook.")
        Exit Sub
    End If
    
    ' Save the workbook as an OGW file
    ' No COM way to do this, use LabTalk
    orig.Execute ("save -i " + fileName)

    ' Destroy the workbook
    orig.DestroyPage (Workbook.Name)
    Set Workbook = Nothing
    
    ' Open the OGW file to create a new workbook
    If Not orig.Load(fileName, True) Then
        MsgBox ("Failed to load file.")
        Exit Sub
    End If

    ' Copy data from worksheet
    Dim dataGet As Variant
    dataGet = orig.GetWorksheet("", 0, 0, -1, -1, ARRAY2D_VARIANT)
    
    ' Put data into Excel worksheet
    Dim dataRows As Integer
    dataRows = UBound(dataGet)
    Range("A1").Resize(dataRows, 2) = dataGet
    
    ' Get metadata from workbook
    Set Workbook = orig.ActivePage
    If Workbook Is Nothing Then
        MsgBox ("Failed to get workbook from OGW.")
        Exit Sub
    End If
    xmlOrigin.Text = Workbook.GetMetaData("UserBookInfo", True)

    ' Put metadata into Excel worksheet

    ' Disconnect from Origin
    Set orig = Nothing

C#

// This code references Origin or OrgLab8 and Microsoft XML v2.6

static void Main(string[] args)
{
	// This example expects write access to C:
	// If you do not have write access to C: then
	// change the fileName assignment below to a drive with write access.
	string strFileName = "C:\\testBook.ogw";

	// Connect to Origin or Orglab
	Origin.Application orgApp = new Origin.Application();
	if (null == orgApp)
	{
		Console.WriteLine("Failed to connect to Origin or Orglab.");
		return;
	}

	CreateOGW(orgApp, strFileName);
	OpenOGW(orgApp, strFileName);

	Console.ReadKey();

	// Disconnect from Origin
	orgApp = null;
}

static bool CreateOGW(Origin.Application orgApp, string strFileName)
{
	// Create a new workbook and worksheet
	string strWBookName = orgApp.CreatePage((int)Origin.PAGETYPES.OPT_WORKSHEET, "OriginLab", "Origin", 2);
	if( "" == strWBookName )
	{
		Console.WriteLine("Failed to create an Origin Workbook.");
		return false;
	}
	Origin.Worksheet wks = orgApp.FindWorksheet(""); // Use empty string to get active
	if (null == wks)
	{
		Console.WriteLine("Failed to find the newly created worksheet.");
		return false;
	}
	Origin.WorksheetPage wkbook = (Origin.WorksheetPage)wks.Parent;
	if (null == wkbook)
	{
		Console.WriteLine("Failed to get the newly created workbook.");
		return false;
	}

	// Put data into the worksheet
	int i;
	Double[] d1 = new double[32];
	Double[] d2 = new double[32];
	for( i = 0; i < 32; i++ )
	{
		d1[i] = i;
		d2[i] = i * 1.012;
	}
	wks.Columns[0].SetData(d1, System.Type.Missing);  //col (1)
	wks.Columns[1].SetData(d2, System.Type.Missing);  //col (2)

	// Create XML meta-data to be put into workbook
	XmlDocument xmlDoc = new XmlDocument();
	XmlElement elemRoot = xmlDoc.CreateElement("OriginStorage");
	xmlDoc.AppendChild(elemRoot);
	XmlElement elem;
	elem = xmlDoc.CreateElement("Color");
	elem.InnerText = "Blue"; elemRoot.AppendChild(elem);
	elem = xmlDoc.CreateElement("Length");
	elem.InnerText = "42"; elemRoot.AppendChild(elem);

	// Put meta-data into workbook
	if (!wkbook.SetMetaData(elemRoot.OuterXml, "UserBookInfo", true))
	{
		Console.WriteLine("Failed to set meta data into workbook.");
		return false;
	}

	// Save the workbook as an OGW file
	// No COM way to do this, use LabTalk
	orgApp.Execute("save -i " + strFileName, strWBookName);

	// Destroy the workbook
	wkbook.Destroy();
	
	return true;
}

static bool OpenOGW(Origin.Application orgApp, string strFileName)
{
	// Open the OGW file to create a new workbook
	if( !orgApp.Load(strFileName, true) )
	{
		Console.WriteLine("Failed to load OGW file.");
		return false;
	}

	// Get the active workbook and it's active worksheet
	Origin.Worksheet wks = orgApp.FindWorksheet(""); // Use empty string to get active
	if (null == wks)
	{
		Console.WriteLine("Failed to find the newly created worksheet.");
		return false;
	}
	Origin.WorksheetPage wkbook = (Origin.WorksheetPage)wks.Parent;
	if (null == wkbook)
	{
		Console.WriteLine("Failed to get the newly created workbook.");
		return false;
	}

	// Get and output the data from the worksheet
	object do1 = wks.Columns[0].GetData(Origin.ARRAYDATAFORMAT.ARRAY1D_NUMERIC, 0, -1, 0);  //col (1)
	object do2 = wks.Columns[1].GetData(Origin.ARRAYDATAFORMAT.ARRAY1D_NUMERIC, 0, -1, 0);  //col (2)
	double[] d1 = do1 as double[];
	double[] d2 = do2 as double[];
	for (int i = 0; i < d1.GetUpperBound(0); i++)
	{
		Console.WriteLine(i + "\t" + d1[i] + "\t" + d2[i]);
	}

	// Get and output the meta data from the workbook
	string strXML = wkbook.GetMetaData("UserBookInfo", true);
	XmlDocument xmlDoc = new XmlDocument();
	xmlDoc.LoadXml(strXML);


	return true;
}