MWFlags类

MWFlags类包含一系列数组格式化和数据转换标记。所有MATLAB Excel插件都包含一个MWFlags对象的引用。它可以在对象的水平上修改数据转换的规则。本类包含下面这些属 性和方法:

ArrayFormatFlags As MWArrayFormatFlags属性。

DateConversionFlags As MWDateConversionFlags属性。

Clone(ppFlags As MWFlags)方法。

ArrayFormatFlags属性控制数组格式(作为矩阵还是元胞数组),以及将这些规则应用于内嵌数组。该属性返回一个MWArrayFormatFlags类型的对象。MWArrayFormatFlags类是一个不能通过MWFlags类实例创建的类,有以下6个属性。

InputArrayFormat属性。该属性控制数组的格式。这些数组作为输入参数传递给MATLAB Excel插件编译器的类方法,默认值为mwArrayFormatMatrix,这些数组的格式化规范用表5-1列出的标记来表示。

表5-1 输入数组的格式化规范

行 为
mwArrayFormatAsIs 根据默认的转换规则转换数组
mwArrayFormatMatrix 将所有数组强制转换为数组。当遇到的输入变量是Variant型数组时(默认时将它转换为元胞数组),如果每个Variant为单一的值,数据转换函数将本数组转换为一个矩阵,并且所有元素都是数值型的。如果此转换不可行,则创建一个元胞数组
mwArrayFormatCell 将所有数组强制转换为元胞数组。输入的标量或数值型数组转换为元胞数组,每个单元包含一个标量值

InputArrayIndFlag属性。本属性控制应用由InputArrayFormat属性所设置的规则的水平。不必为varargin参数修改本属性。数据转换由代码自动给varargin单元标记值加1,这样,将InputArrayFormat标记应用到varargin参数的每个单元,默认值为0。

OutputArrayFormat属性。

OutputArrayIndFlag属性。

AutoResizeOutput属性。本属性只适用于Excel单元格区域。当方法调用的目标输出是Excel工作表中一个单元格区域内的单元,并且调用时输出数组的大小和形状不知道时,将此标记设为True,指示数据转换代码,以改变每个Excel单元格区域的大小,适应输出数组。改变大小时相对于每个指定单元格区域的左上角进行,默认值为False。

TransposeOutput属性。将这个属性设置为True,对输出变量进行转置,当处理Excel插件编译器方法调用的输出参数时,本属性很有用,这里,MATLAB函数将输出作为行向量,并且需要将数据放到列中。本属性的默认值为False。

DateConversionFlags属性控制需要进行类型转换时,如何处理输入变量,它是DataConversionFlags类型的。MWDateConversionFlags类不能通过MWFlags类的实例获取。本类包括下面4个属性:

CoerceNumericToType属性。本属性将所有数值型输入变量转换为指定的MATLAB类型。在VBA代码中有多个不同数据类型,且需要将它们转换为同一种数据类型的时候,这个标记很有用。该属性的默认值为mwTypeDefault,它使用默认的转换规则。

InputDateFormat属性。本属性将作为输入参数的日期型数据转换为Excel插件编译器的方法调用,默认值为mwDateFormatNumeric。Date数据的转换规则如表5-2所示。

表5-2 Date数据的转换规则

行 为
mwDateFormatNumeric 将日期型转为数值型
mwDateFormatString 将日期型转为字符串型

本例使用数据转换标记更新方法输出的形状。该方法从一个MATLAB函数编译以后得到,它返回一个长度未知的向量。

code.matlab
function p=myprimes(n)
     if length(n)~=1, error('N must be a scalar'); end
     if n < 2, p=zeros(1,0); return, end
     p=1:2:n;
     q=length(p);
     p(1)=2;
     for k=3:2:sqrt(n)
 		if p((k+1)/2)
 			p(((k*k+1)/2):k:q)=0;
 		end
     end
     p=(p(p>0));

本属性(函数)生成一个值在0到n之间的行向量,假设该函数位于版本为1.0的mycomponent组件的myclass类中。下面的过程将一个Excel单元格区域和一个Double型值作为输入,并将生成的数值放到指定的单元格区域内,该函数生成一个行向量。

code.excel vba
Sub GenPrimes(R As text-blue-400">Range, n As Double)
 	Dim aClass As mycomponent.myclass
 	On Error GoTo Handle_Error
 	Set aClass=New mycomponent.myclass
 	aClass.MWFlags.ArrayFormatFlags.AutoResizeOutput=True
 	aClass.MWFlags.ArrayFormatFlags.TransposeOutput=True
 	Call aClass.myprimes(1, R, n)
 	Exit Sub
Handle_Error:
 	text-blue-400">MsgBox (Err.Description)
End Sub

OutputAsDate属性。本属性将输出变量处理为日期。默认时,把经过编译的MATLAB函数输出参数的数值型日期作为Double型值进行传递。将本标记设置为True,将所有输出值转换为Double类型。

DateBias属性。本属性设置日期偏差,以进行COM到MATLAB数值型日期的转换。本属性的默认值为693960,表示COM Date类型与MATLAB数值型日期之间的差异。

Clone方法创建一个MWFlags对象的拷贝,参数ppFlags为MWFlags类型的,是接收拷贝的未初始化的MWFlags对象的引用。

注意:Clone方法分配一个新的MWFlags对象并创建对象内容的一个深度拷贝。当需要单个对象而不是一个已经存在对象引用的共享拷贝时,调用本方法。