Put two dimensional data into a specified Origin worksheet starting at a specified column and row.
This method is the same as Application.PutWorksheet.
VB: Function SetData(data As ByVal Object, [ nRowOffset As ByVal Object ], [ nColOffset As ByVal Object ] ) As Boolean
C++: bool SetData(_variant_t data, _variant_t nRowOffset, _variant_t nColOffset )
C#: bool SetData(var data, var nRowOffset, var nColOffset )
Returns true if successful else false.
The following examples will connect to the currently running Origin and put data into the active worksheet.
See examples at Column.SetData for more details about buffering data of different types.
Set numeric data into an Origin worksheet.
Public Sub SetNumericData() Dim app As Origin.ApplicationSI Dim Wks As Origin.Worksheet Dim Data(1 To 100, 1 To 3) As Double Dim ii As Integer 'Set the 2D numeric array, which has 100 rows and 3 cols For ii = 1 To 100 Data(ii, 1) = ii * 0.01 - 1.23 Data(ii, 2) = ii / 12.8 - 0.75 Data(ii, 3) = ii + 0.123 Next Set app = New Origin.ApplicationSI 'Connect to the running Origin Set Wks = app.FindWorksheet("") 'Select the active worksheet 'Send Numeric values to Origin Wks.SetData (Data) 'Create a new graph page using Origin template Dim glay As Origin.GraphLayer Dim dr As Origin.DataRange Dim dp As Origin.DataPlot Set glay = Wks.Application.GraphPages.Add("Origin").Layers(0) Set dr = Wks.NewDataRange(0, 0, -1, 2) 'create range to be plotted, all rows,A,B,C Set dp = glay.DataPlots.Add(dr, IDM_PLOT_LINE) 'Save the project to Origin User folder app.Save (app.Path(APPPATH_USER) + "COMServerExamples_WN.opj") End Sub
Set text data into an Origin worksheet.
Public Sub SetTextData() Dim app As Origin.ApplicationSI Dim Wks As Origin.Worksheet Dim tData(1 To 100, 1 To 2) As String Dim ii As Integer 'Set the 2D string array, which has 100 rows and 2 cols For ii = 1 To 100 tData(ii, 1) = "abc" + Str(ii) tData(ii, 2) = "def" + Str(ii + 3) Next Set app = New Origin.ApplicationSI Set Wks = app.FindWorksheet("") 'Send Text to Origin Wks.SetData (tData) 'Save the project to Origin User folder app.Save (app.Path(APPPATH_USER) + "COMServerExamples_WT.opj") End Sub
The next example simulates real-time data being sent to the active worksheet.
Private Sub SimulateRealTimeData() Const NUM_BLOCKS = 10000 Const NUM_PTS_PER_BLOCK = 100 Dim app As Origin.ApplicationSI Dim wks As Origin.Worksheet Dim block As Integer Dim data(1 To NUM_PTS_PER_BLOCK, 1) As Double Dim point As Integer Dim startSecs As Single Dim row As Integer Dim bRet As Integer Set app = New Origin.ApplicationSI Set wks = app.FindWorksheet("") ' active worksheet If wks Is Nothing Then MsgBox ("Specified Worksheet not found") Else row = 0 For block = 1 To NUM_BLOCKS ' generate some random data For point = 1 To NUM_PTS_PER_BLOCK data(point, 0) = Rnd(1) data(point, 1) = Rnd(1) Next point ' send data to worksheet bRet = wks.SetData(data, row) ' calc target row for next block row = row + NUM_PTS_PER_BLOCK ' pause before sending next block of data startSecs = Timer Do While Timer < startSecs + 2 DoEvents Loop Next block End If End Sub
Set numeric data into an Origin worksheet.
static void SetNumericData() { // Create some data to put into the worksheet. float[,] data = new float[100, 3]; for (int i = 0; i < 100; i++) { data[i, 0] = (float)(i * 0.01 - 1.23); data[i, 1] = (float)(i / 12.8 - 0.75); data[i, 2] = (float)(i + 0.123); } // Connect to Origin. Origin.ApplicationSI originApp = new Origin.ApplicationSI(); // Get the active worksheet. Origin.Worksheet wks = originApp.FindWorksheet(""); // Put the data into the worksheet starting at column 1 and row 1. wks.SetData(data, 0, 0); }
Set text data into an Origin worksheet.
static void SetTextData() { // Create some data to put into the worksheet. string[,] data = new string[100, 2]; for (int i = 0; i < 100; i++) { data[i, 0] = "abc" + i.ToString(); data[i, 1] = "def" + (i + 3).ToString(); } // Connect to Origin. Origin.ApplicationSI originApp = new Origin.ApplicationSI(); // Get the active worksheet. Origin.Worksheet wks = originApp.FindWorksheet(""); // Put the data into the worksheet starting at column 1 and row 1. wks.SetData(data, 0, 0); }
The following code will run a new instance of Origin and send data to a specified worksheet
#include "stdafx.h" #include <afxdisp.h> // MFC classes, as to use COleSafeArray //make sure Origin8.tlb in the same folder as this program #import "Origin8.tlb" rename_namespace("Origin") using namespace Origin; #define NUM_COLS 4 #define NUM_ROWS 10 #define PAGE_TYPE_WKS 2 #define PAGE_VISIBLE 2 bool sendDataToWks() { Origin::IOApplicationPtr pOrigin; pOrigin.CreateInstance(__uuidof(Application)); //use __uuidof(ApplicationSI) will connect to a running Origin instance pOrigin->PutVisible(Origin::MAINWND_SHOW_BRING_TO_FRONT); pOrigin->CreatePage(PAGE_TYPE_WKS, "Data", "w", PAGE_VISIBLE); //"w" is template name while "Data" as worksheet page name Origin::WorksheetPagePtr pPage = pOrigin->GetActivePage(); pPage->Activate(); Origin::WorksheetPtr pwks = pPage->GetLayers()->Add("abc"); //new worksheet name is abc pwks->Activate(); COleSafeArray csarr; DWORD dwBound[] = {NUM_ROWS, NUM_COLS}; //declare the array as NUM_ROWS*NUM_COLS csarr.Create(VT_UI2, 2, dwBound); long nIndices[2]; USHORT uData; for ( int ii = 0; ii < NUM_ROWS; ii++ ) { for ( int jj = 0; jj < NUM_COLS; jj++) { nIndices[0] = ii; nIndices[1] = jj; uData = (ii + jj)%65536; csarr.PutElement(nIndices, &uData); } } pwks->SetData(csarr, 0, 0); System::Console::ReadKey();//press key will exit Origin and this instance pOrigin->Exit(); return true; }
8.0SR2
GetData | Application.PutWorksheet | Application.GetWorksheet | Column.SetData | Column.GetData