private void Close(Param param) { GICO.WriteLine("OriginConnect: Closing Origin.."); if (pOrigin != null) { pOrigin.Visible = MAINWND_VISIBLE.MAINWND_HIDE; pOrigin.Exit(); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(pOrigin); pWorksheet = null; pGraphLayer = null; pDataPlot = null; pOrigin = null; //int hWnd = pOrigin.Application.Hwnd; //Force KILL //uint processID; //GetWindowThreadProcessId((IntPtr)hWnd, out processID); System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcessesByName("Origin~1"); foreach (System.Diagnostics.Process p in procs) { //if (p.Id == processID) p.Kill(); } } }
private void OpenSheet(Param param) { try { String strWkName = "ScatterData"; pWorksheet = pOrigin.FindWorksheet(strWkName); if (pWorksheet == null) //if check don't exist, create workbook { strWkName = (String)pOrigin.CreatePage((int)Origin.PAGETYPES.OPT_WORKSHEET, strWkName, "Origin", 2); } pWorksheet = (Worksheet)pOrigin.WorksheetPages[strWkName].Layers[0]; //prepare XYZ column for putting data pWorksheet.Cols = 3; Column colA = pWorksheet.Columns[0]; colA.Type = COLTYPES.COLTYPE_X; Column colB = pWorksheet.Columns[1]; colB.Type = COLTYPES.COLTYPE_Y; Column colC = pWorksheet.Columns[2]; colC.Type = COLTYPES.COLTYPE_Z; //prepare graph layer for plotting String strGrName = "3DScatterPlot"; //if check don't exist, create it. pGraphLayer = pOrigin.FindGraphLayer(strGrName); if (pGraphLayer == null) { strGrName = (String)pOrigin.CreatePage((int)Origin.PAGETYPES.OPT_GRAPH, strGrName, "3D", 2); //3D scatter need "3D" template } pGraphLayer = (GraphLayer)pOrigin.GraphPages[strGrName].Layers[0]; //parepare XYZDataRange DataRange drXYZ = pWorksheet.NewDataRange(0, 0, -1, -1); //plot 3D scatter on GraphLayer String strPlotName = "ScatterData_C"; //if exists, don't add new plot, plot name is related to workbook name and column name. pDataPlot = pGraphLayer.DataPlots[strPlotName]; if (pDataPlot == null) { pDataPlot = pGraphLayer.DataPlots.Add(drXYZ, PLOTTYPES.IDM_PLOT_3D_SCATTER); } //force axis rescale as auto to make plot visible pGraphLayer.Execute("layer.x.rescale=3"); pGraphLayer.Execute("layer.y.rescale=3"); pGraphLayer.Execute("layer.z.rescale=3"); SentData(param); } catch (System.Exception ex) { String strMsg = ResourceException.Origin_FailedPlotting; GICO.WriteLine(strMsg); GICO.WriteLine(ex); throw; } }
public static DataColumnCollection GetPropertyColumns(this Origin.Worksheet wks) { if (null == wks) { throw new ArgumentNullException("wks"); } var result = new DataColumnCollection(); // I found no way to ask, if a label column is used or not // therefore, we have to try all cells inside the longname, the units and the comments label column var labelCols = new Dictionary <string, Altaxo.Data.TextColumn>(); DataColumn destLongNameCol = null, destUnitCol = null, destCommentCol = null; var paraCol = new DataColumn[20]; var srcDataCols = wks.Cols; for (int i = 0; i < srcDataCols; ++i) { var srcCol = wks.Columns[i]; if (!string.IsNullOrEmpty(srcCol.LongName)) { if (null == destLongNameCol) { destLongNameCol = result.EnsureExistence("LongName", typeof(TextColumn), ColumnKind.V, 0); } destLongNameCol[i] = srcCol.LongName; } if (!string.IsNullOrEmpty(srcCol.Units)) { if (null == destUnitCol) { destUnitCol = result.EnsureExistence("Unit", typeof(TextColumn), ColumnKind.V, 0); } destUnitCol[i] = srcCol.Units; } if (!string.IsNullOrEmpty(srcCol.Comments)) { if (null == destCommentCol) { destCommentCol = result.EnsureExistence("Comments", typeof(TextColumn), ColumnKind.V, 0); } destCommentCol[i] = srcCol.Comments; } for (int nPara = 0; nPara <= 11; ++nPara) { if (!string.IsNullOrEmpty(srcCol.Parameter[nPara])) { if (null == paraCol[nPara]) { paraCol[nPara] = result.EnsureExistence("Parameter" + nPara.ToString(), typeof(TextColumn), ColumnKind.V, 0); } paraCol[nPara][i] = srcCol.Parameter[nPara]; } } } return(result); }
/// <summary> /// Retrieves the data columns from an Origin table. /// </summary> /// <param name="wks">The Origin worksheet to retrieve the data from.</param> /// <returns>The data columns with the data from the Origin worksheet.</returns> public static Altaxo.Data.DataColumnCollection GetDataColumns(this Origin.Worksheet wks) { var culture = Current.PropertyService.GetValue(Altaxo.Settings.CultureSettings.PropertyKeyDocumentCulture, Altaxo.Main.Services.RuntimePropertyKind.UserAndApplicationAndBuiltin).Culture; int nCols = wks.Cols; var result = new Altaxo.Data.DataColumnCollection(); for (int c = 0; c < nCols; c++) { var srcCol = wks.Columns[c]; Altaxo.Data.DataColumn destCol = GetAltaxoColumnFromOriginDataFormat(srcCol.DataFormat); int groupNumber = -1; var altaxoColumnKind = OriginToAltaxoColumnKind(srcCol.Type); if (altaxoColumnKind == Altaxo.Data.ColumnKind.X) { groupNumber++; } if (destCol is DoubleColumn) { var data = srcCol.GetData(Origin.ARRAYDATAFORMAT.ARRAY1D_NUMERIC, 0, -1, 0); (destCol as DoubleColumn).Array = (double[])data; } else if (destCol is DateTimeColumn) { var data = (double[])srcCol.GetData(Origin.ARRAYDATAFORMAT.ARRAY1D_NUMERIC, 0, -1, 0); const double refDateAsDouble = 2451910; // this is the number of days in julian calendar belonging to the date below... var refDate = DateTime.Parse("2001-01-01", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeUniversal); for (int i = data.Length - 1; i >= 0; --i) { destCol[i] = refDate.AddDays(data[i] - refDateAsDouble); } } else if (destCol is TextColumn && srcCol.DataFormat == COLDATAFORMAT.DF_TEXT_NUMERIC) { var data = srcCol.GetData(Origin.ARRAYDATAFORMAT.ARRAY1D_VARIANT, 0, -1, 0); var destColNum = new Altaxo.Data.DoubleColumn(); object[] oarr; if (null != (oarr = data as object[])) { int numberOfNums = 0; int numberOfObjects = 0; for (int i = 0; i < oarr.Length; ++i) { if (oarr[i] is double) { destColNum[i] = (double)oarr[i]; ++numberOfNums; } if (oarr[i] != null) { destCol[i] = string.Format(culture, "{0}", oarr[i]); ++numberOfObjects; } } // if the column consist mostly of numerics, then exchange it with destcol if (numberOfNums >= 0.99 * numberOfObjects || numberOfNums >= numberOfObjects - 2) { destCol = destColNum; } } } else if (destCol is TextColumn) { var data = srcCol.GetData(Origin.ARRAYDATAFORMAT.ARRAY1D_TEXT, 0, -1, 0); string[] sarr; object[] oarr; if (null != (sarr = data as string[])) { (destCol as TextColumn).Array = sarr; } else if (null != (oarr = data as object[])) { for (int i = 0; i < oarr.Length; ++i) { if (null != oarr[i]) { destCol[i] = string.Format(culture, "{0}", oarr[i]); } else { destCol[i] = null; } } } } result.Add(destCol, (!string.IsNullOrEmpty(srcCol.LongName) ? srcCol.LongName : srcCol.Name), altaxoColumnKind, Math.Max(0, groupNumber)); } return(result); }