1.4.7 Saving Meta Data into Origin Books

Passing XML to Origin Workbook


    'First add Reference to Microsoft XML v2.6 or later
    'Before running, first run Origin with default workbook which you can open Workbook Organizer
    'to examine the result
    Dim app As Origin.ApplicationSI
    Dim WkBk As Origin.WorksheetPage
    Dim Wks As Origin.Worksheet
    Dim strXML As String
    Dim tree As MSXML2.DOMDocument
    Dim treeNodeTop As MSXML2.IXMLDOMElement
    Dim treeNode As MSXML2.IXMLDOMElement
    Set tree = New MSXML2.DOMDocument
    'Set XML String, which has two branch and some nodes.
    Set treeNodeTop = tree.appendChild(tree.createElement("OriginStorage"))
    Set treeNode = treeNodeTop.appendChild(tree.createElement("data"))
    'make the data branch Read Only with blue text, 0=disable, 1 = enable, 2 = read-only blue text, 3=read-only normal text
    treeNode.setAttribute "Enable", 2
    Set treeNode = treeNode.appendChild(tree.createElement("StartTime"))
    treeNode.Text = "2007-03-05 09:15:06.345"
    Set treeNode = treeNode.parentNode
    Set treeNode = treeNode.appendChild(tree.createElement("StopTime"))
    treeNode.Text = "2007-03-05 11:37:43.123"
    Set treeNode = treeNode.parentNode
    Set treeNode = treeNode.appendChild(tree.createElement("Operator"))
    treeNode.Text = "John Smith"
    Set treeNode = treeNodeTop.appendChild(tree.createElement("Instrument"))
    'make the Instrument branch Read Only with normal text
    treeNode.setAttribute "Enable", 3
    Set treeNode = treeNode.appendChild(tree.createElement("SerialNumber"))
    treeNode.Text = "EQR-23456"
    Set treeNode = treeNode.parentNode
    Set treeNode = treeNode.appendChild(tree.createElement("UsageCount"))
    treeNode.Text = "2345"
    strXML = treeNodeTop.XML
    Set app = New Origin.ApplicationSI
    Set Wks = app.FindWorksheet("")   'Set Wks as the active Worksheet
    Set WkBk = Wks.Parent   'Set WkBk as the active Workbook
    Dim bRet As Boolean
    bRet = Wks.Columns(0).SetMetaData(strXML, "UserColInfo", True)  'Set XML to Column
    bRet = Wks.SetMetaData(strXML, "UserSheetInfo", True)   'Set XML to Worksheet
    bRet = WkBk.SetMetaData(strXML, "UserBookInfo", True)   'Set XML to Workbook
    bRet = WkBk.SetMetaData(strXML, "CustomInfo", False)   'hide this from user, should not see this from Workbook Organizer, but can see by page.info listing


using Origin;
using System.Xml;
static void SetMetaData()
    //Set XML String, which has two branch and some nodes.
    XmlDocument xmlDoc = new XmlDocument();
    XmlNode Node;
    XmlElement topXML;
    XmlElement Element;

    topXML = xmlDoc.CreateElement("DAQ");
    //make the data branch Read Only with blue text, 0=disable, 1 = enable, 2 = read-only blue text, 3=read-only normal text
    topXML.SetAttribute("Enable", "2");
    Node = xmlDoc.AppendChild(topXML);
    Node = Node.AppendChild(xmlDoc.CreateElement("Data"));
    Element = xmlDoc.CreateElement("StartTime");
    Element.InnerText = "2007-03-05 09:15:06.345";
    Node = Node.AppendChild(Element);
    Element = xmlDoc.CreateElement("StopTime");
    Element.InnerText = "2007-03-05 09:15:06.345";
    Node = Node.ParentNode.AppendChild(Element);
    Element = xmlDoc.CreateElement("Operator");
    Element.InnerText = "John Smith";
    Node = Node.ParentNode.AppendChild(Element);
    Node = Node.ParentNode.ParentNode.AppendChild(xmlDoc.CreateElement("Instrument"));
    //make the Instrument branch Read Only with normal text
    topXML.SetAttribute("Enable", "3");
    Element = xmlDoc.CreateElement("SerialNumber");
    Element.InnerText = "EQR-23456";
    Node = Node.AppendChild(Element);
    Element = xmlDoc.CreateElement("UsageCount");
    Element.InnerText = "2345";
    Node = Node.ParentNode.AppendChild(Element);

    string strXML = topXML.OuterXml;

    Origin.ApplicationSI app = new Origin.ApplicationSI();     //Connect to the running Origin
    Worksheet wks = app.FindWorksheet("");     //Set wks as the active Worksheet
    WorksheetPage wkbk = (WorksheetPage)wks.Parent;     //Set wkbk as the active Workbook

    wks.Columns[0].SetMetaData(strXML, "UserColInfo", true);     //Set XML to Column
    wks.SetMetaData(strXML, "UserSheetInfo", true);     //Set XML to Worksheet
    wkbk.SetMetaData(strXML, "UserBookInfo", true);     //Set XML to Workbook
    wkbk.SetMetaData(strXML, "CustomTree", false);     //Set XML to Workbook. This will no longer be visible from book organizer, but can be accessed from Origin C program

    //Save the project
    app.Save(app.path(Origin.APPPATH_TYPES.APPPATH_USER) + "SetMetaData.opj");


#import "Origin8.tlb" rename_namespace("Origin")
using namespace Origin;
using namespace System::Xml;

#define	PAGE_TYPE_WKS	2
#define	PAGE_VISIBLE	2 
bool saveMetaDataToWks()
	XmlDocument xmlDoc;
	XmlElement^ xmlEleTop = xmlDoc.CreateElement("DAQ");
	//make the data branch Read Only with blue text, 0=disable, 1 = enable, 2 = read-only blue text, 3=read-only normal text
	xmlEleTop->SetAttribute("Enable", "2");

	XmlNode^ xmlNode = xmlDoc.AppendChild(xmlEleTop);
	xmlNode = xmlNode->AppendChild(xmlDoc.CreateElement("Data"));

	XmlNode^ xmlEle = xmlDoc.CreateElement("StartTime");
	xmlEle->InnerText = "2008-12-25 15:35:36.222";
	xmlNode = xmlNode->AppendChild(xmlEle);

	xmlEle = xmlDoc.CreateElement("StopTime");
	xmlEle->InnerText = "2008-12-25 15:40:40.125";
	xmlNode = xmlNode->ParentNode->AppendChild(xmlEle);

	xmlEle = xmlDoc.CreateElement("Operator");
	xmlEle->InnerText = "Sophy Huang";
	xmlNode = xmlNode->ParentNode->AppendChild(xmlEle);
	xmlNode = xmlNode->ParentNode->ParentNode->AppendChild(xmlDoc.CreateElement("Instrument"));
	//make the Instrument branch Read Only with normal text
	xmlEleTop->SetAttribute("Enable", "3");

	xmlEle = xmlDoc.CreateElement("SerialNumber");
	xmlEle->InnerText = "EQR-23456";
	xmlNode = xmlNode->AppendChild(xmlEle);
	xmlEle = xmlDoc.CreateElement("UsageCount");
	xmlEle->InnerText = "2345";
	xmlNode = xmlNode->ParentNode->AppendChild(xmlEle);

	CString str = xmlEleTop->OuterXml;
	_bstr_t strXML = str.GetString();
	Origin::IOApplicationPtr pOrigin;
	pOrigin.CreateInstance(__uuidof(ApplicationSI)); //connect to running Origin instance

	//Origin::WorksheetPtr pwks = pOrigin->; //get active worksheet
	pOrigin->CreatePage( PAGE_TYPE_WKS, "CustomerBook", "w", PAGE_VISIBLE);
	Origin::WorksheetPagePtr pWksPage = pOrigin->GetActivePage();
	Origin::WorksheetPtr pwks = pWksPage->GetLayers()->Add("UserData");
	if ( pwks )
		Origin::ColumnPtr pCol = pwks->GetColumns()->Add("MyVC++");

		pCol->SetMetaData(strXML, "UserColInfo", true);//set XML to Column
		pwks->SetMetaData(strXML, "UserSheetInfo", true); //set XML to worksheet
		pWksPage->SetMetaData(strXML, "UserBookInfo", true); //set XML to workbook
		pWksPage->SetMetaData(strXML, "CustomTree", false); //set XML to workbook, this will no longer be visible from book organizer but can be accessed by OC code
		pOrigin->Save(pOrigin->Path(Origin::APPPATH_USER) + "SetMetaData.opj" ); //save project for check whether it is successfully set

	return true;