SimWe仿真论坛's Archiver

COMSOL 2008年会圆满结束!

蓝色梧桐 发表于 2007-10-25 23:41

Range 简介

在 Origin 8 之前的版本中,worksheet 上的 column 用 Data1_A,%(Data1, 1) 等格式表示,而从 Origin 8 开始 workbook 支持 multi-worksheet,因此需要一种新的办法来引用各个 sheets,columns 或者 cells,从而产生了 Range 的概念。Range 的格式为:

[color=blue][b][[/b][/color][i]WinName[/i][color=blue][b]][/b][/color][i]LayerName[/i][color=red][b]![/b][/color][i]DataRange[/i]

Origin 常用的 windows 有 workbook,matrix 和 graph,因此 range 具体到各个不同的 windows 时则写成:

[BookName]SheetName!CellRange  // workbook range
[MatrixBook]MatrixSheet!MatrixObject  // matrix range
[PageWindow]LayerName!DataPlot  // plots

这样的格式跟 Excel 有点类似,但需要注意的是 Origin 的 Range 没有 Excel 那么自由(原因很多,比如兼容问题等)。直接使用 Range 只能在作为 X-Functions (另外一个新引入的东东)的参数才合法,否则则需要定义一个 Range Variable。下面将分别介绍。

蓝色梧桐 发表于 2007-10-25 23:46

一、Renge Variable

在 Command Window 中(Window : Command Window)定义一个 Range Variable:

[color=blue]Range 关键字[/color] + [color=blue]变量名[/color] = [color=blue]具体的 Range[/color]

比如:[code]range cc = [Book1]Sheet2!Col(3);   // Column 3 on Book1, Sheet2
range ll = [Graph1]Layer1!2;       // Second curve on Graph1, layer1
range mm = [MBook1]MSheet1!Mat(2); // Second matrix object on MBook1, MSheet1[/code]定义完 range variable 后可以进行一些基本的运算,如:[code]range r1 = [Book1]Sheet1!Col(1);
range r2 = [Book2]Sheet2!Col(2);
r2 = 2*r1;[/code]当定义 range 时,active 的 window 是想要定义的 range 的 window,可以省略前面两层,如:[code]range rr = Col(1);  // First column of active worksheet
rr *= 2;[/code]如果 range variable 定义到整个 column,sheets,layer 或者整个 window,可以用 range variable 代表这些 object 并可以访问这些 object 的属性。如:[code]range ws = [book1]sheet1! // "!" is necessary. ws represents sheet1 in book1[/code]可以敲入[code]ws.=[/code]来列出整个 worksheet 的属性,或者修改某些属性,如[code]
ws.name$ = "Hello"; // rename worksheet[/code]

蓝色梧桐 发表于 2007-10-25 23:48

二、直接使用 Range 只能在作为 X-Functions 的参数

X-Function 是 Origin 8 引入的新的概念,一般用户不需要了解什么是 X-Function,用户可以像使用 LabTalk 命令或者 Matlab 函数那样使用 X-Function。当在 command window 中敲入 X-Function 名字时,自动补齐功能会给你提示需要哪些参数。而 range 可以直接作为 X-Function 的参数,当然,你也可以先定义一个 range variable,再作为参数输入。比如 stats 这个 X-Function:

[code]
stats col(a); // Descriptive statistics on column A of active worksheet
stats [book1]sheet2!Col(3); // Stats on column 3 of book1, sheet2
range rr = (col(a), col(b)); // Two columns in active worksheet
stats rr; // stats on range variable rr;
[/code]

蓝色梧桐 发表于 2007-10-25 23:49

三、一个应用

毕竟用 LabTalk 或者 Origin C 编程的人不多,我想更多的人用到 range variable 的是在 Set Column Value 这个 dialog 上。如果 Set Column Value 需要引用的数据在同一个 worksheet 上,则 col(a)、col(b) 还是可以满足需求的,如

col(b) = exp(col(a));

但若要引用另外的 workbook 或者 worksheet 上的 column 时,则需要先定义一个 range variable。如下图所示,展开下面的 Before Formula Scripts 面板,先定义一个 range variable

range rr = [book1]sheet2!col(a);

然后才在上面的 edit box 上写入 set value 的条件:

exp(rr);

[[i] 本帖最后由 蓝色梧桐 于 2007-10-26 00:17 编辑 [/i]]

cherry83 发表于 2007-10-26 10:50

好,学到了!:victory:

页: [1]
 

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.