类 MWUtil
MWUtil 类包含一组用于数组处理和应用程序初始化的静态实用方法。此类在内部作为单例实现(每个 Microsoft® Excel® 实例仅有一个此类的全局实例)。在每个使用该类型的模块的全局范围内声明一个此类型的变量是最有效的。下面列出了 MWUtil 的方法。
函数原型使用 Visual Basic® 语法。
Sub MWInitApplication(pApp As Object)
使用当前的 Microsoft Excel 实例初始化库。
参数
| 参量 | 类型 | 描述 |
|---|---|---|
|
|
| 对当前 Excel 应用程序的有效引用 |
返回值
无。
备注
对于使用 MATLAB® Compiler™ 创建的 COM 组件的 Excel 每个会话,都必须调用一次此函数。如果对任何 MATLAB Compiler SDK™ COM 组件的成员类进行方法调用,并且库尚未初始化,则会生成错误。
示例
此 Visual Basic 示例使用当前 Excel 实例初始化 MWComUtil 库。一个名为 Object 的 MCLUtil 类型的全局变量保存了 MWUtil 类的实例,另一个名为 Boolean 的 bModuleInitialized 类型的全局变量存储了初始化过程的状态。私有子程序 InitModule() 创建 MWComUtil 类的实例,并使用 MWInitApplication 参量调用 Application 方法。一旦此函数成功,所有后续调用都会退出而不重新创建该对象。
Dim MCLUtil As Object
Dim bModuleInitialized As Boolean
Private Sub InitModule()
If Not bModuleInitialized Then
On Error GoTo Handle_Error
If MCLUtil Is Nothing Then
Set MCLUtil = CreateObject("MWComUtil.MWUtil")
End If
Call MCLUtil.MWInitApplication(Application)
bModuleInitialized = True
Exit Sub
Handle_Error:
bModuleInitialized = False
End If
End Sub
注意
例如,如果您同时使用多个版本的 MATLAB 和 MWComUtil.dll 进行开发,则使用以下语法要求您在每次升级时重新编译 COM 模块。
Set MCLUtil = CreateObject("MWComUtil.MWUtil")MWUtil 模块的调用特定于版本,其中 x.x 是特定的版本号。Set MCLUtil = CreateObject("MWComUtil.MWUtilx.x")Sub MWInitApplicationWithMCROptions(pApp As Object, [mcrOptionList])
使用 MATLAB Runtime 选项启动 MATLAB 运行时。类似于mclInitializeApplication (MATLAB Compiler SDK)。
参数
| 参量 | 类型 | 描述 |
|---|---|---|
|
|
| 仅从 Excel 应用程序调用时才有效引用 非 Excel COM 客户端传入 |
返回值
无。
备注
调用此函数传递 MATLAB Runtime 选项(nojvm、logfile 等)。每个进程调用一次此函数。
示例
此 Visual Basic 示例使用当前 Excel 实例初始化 MWComUtil 库。一个名为 Object 的 MCLUtil 类型的全局变量保存了 MWUtil 类的实例,另一个名为 Boolean 的 bModuleInitialized 类型的全局变量存储了初始化过程的状态。私有子程序 InitModule() 创建 MWComUtil 类的一个实例,并使用 MWInitApplicationWithMCROptions 参量和包含选项的字符串数组调用 Application 方法。一旦此函数成功,所有后续调用都会退出而不重新创建该对象。当此函数成功执行时,MATLAB Runtime 将启动,没有 JVM® 和一个名为 logfile.txt 的日志文件。
Dim MCLUtil As Object
Dim bModuleInitialized As Boolean
Private Sub InitModule()
If Not bModuleInitialized Then
On Error GoTo Handle_Error
If MCLUtil Is Nothing Then
Set MCLUtil = CreateObject("MWComUtil.MWUtil")
End If
Dim mcrOptions(1 To 3) as String
mcrOptions(1) = "-nojvm"
mcrOptions(2) = "-logfile"
mcrOptions(3) = "logfile.txt"
Call MCLUtil.MWInitApplicationWithMCROptions(Application, mcrOptions)
bModuleInitialized = True
Exit Sub
Handle_Error:
bModuleInitialized = False
End If
End Sub
注意
如果您没有使用 Excel,请将 Nothing 而不是 Application 传递给 MWInitApplicationWithMCROptions。
Function IsMCRJVMEnabled() As Boolean
如果 MATLAB Runtime 是使用 JVM 启动的,则返回 true;否则返回 false。
参数
无。
返回值
Boolean
Function IsMCRInitialized() As Boolean
如果 MATLAB Runtime 已初始化,则返回 true;否则返回 false
参数
无。
返回值
Boolean
Sub MWPack(pVarArg, [Var0], [Var1], ... ,[Var31])
将可变长度的 Variant 参量列表打包到单个 Variant 数组中。此函数通常用于从单独输入的列表中创建 varargin 单元。仅当列表不为空或缺失时,才会将列表中的每个输入添加到数组中。(在 Visual Basic 中,缺少的参数由 Variant 类型的 vbError 表示,其值为 &H80020004。)
参数
| 参量 | 类型 | 描述 |
|---|---|---|
|
|
| 接收生成的数组 |
[Var0], [Var1], ... |
| 要打包到数组中的 |
返回值
无。
备注
此函数总是在处理列表之前释放 pVarArg 的内容。
示例
此示例在公式函数中使用 MWPack 生成一个 varargin 元胞,作为输入参数传递给由具有以下签名的 MATLAB 函数编译的方法:
function y = mysum(varargin)
y = sum([varargin{:}]);
该函数返回 varargin 中元素的总和。假设该函数是名为 myclass 的类的方法,该类包含在名为 mycomponent 组件中,版本为 1.0。Visual Basic 函数最多允许 10 个输入,并返回结果 y。如果发生错误,该函数将返回错误消息。此函数假定 MWInitApplication 先前已被调用。
Function mysum(Optional V0 As Variant, _
Optional V1 As Variant, _
Optional V2 As Variant, _
Optional V3 As Variant, _
Optional V4 As Variant, _
Optional V5 As Variant, _
Optional V6 As Variant, _
Optional V7 As Variant, _
Optional V8 As Variant, _
Optional V9 As Variant) As Variant
Dim y As Variant
Dim varargin As Variant
Dim aClass As Object
Dim aUtil As Object
On Error Goto Handle_Error
Set aClass = CreateObject("mycomponent.myclass.1_0")
Set aUtil = CreateObject("MWComUtil.MWUtil")
Call aUtil.MWPack(varargin,V0,V1,V2,V3,V4,V5,V6,V7,V8,V9)
Call aClass.mysum(1, y, varargin)
mysum = y
Exit Function
Handle_Error:
mysum = Err.Description
End Function
Sub MWUnpack(VarArg, [nStartAt As Long], [bAutoResize As Boolean = False], [pVar0], [pVar1], ..., [pVar31])
将 Variant 数组解包为各个 Variant 参量。此函数提供 MWPack 的反向功能,通常用于将 varargout 单元处理为单独的 Variant。
参数
| 参量 | 类型 | 描述 |
|---|---|---|
|
|
| 要处理的 |
|
|
| 数组中的可选起始索引(从零开始)用于开始处理。默认值 = |
|
|
| 可选的自动调整大小标志。如果此标志为 |
|
|
| 可选的 |
返回值
无。
备注
此函数可以在一次调用中或通过使用 Variant 参数的多次调用来处理 nStartAt 数组。
示例
此示例使用 MWUnpack 将 varargout 元胞处理为多个 Excel 范围,同时自动调整每个范围的大小。varargout 参数由从 MATLAB 函数编译的方法提供。
function varargout = randvectors
for i=1:nargout
varargout{i} = rand(i,1);
end
该函数产生一系列 nargout 随机列向量,其中第 i 个向量的长度等于 i。假设该函数包含在名为 myclass 的类中,该类包含在名为 mycomponent 组件中,版本为 1.0。Visual Basic 子程序不采用任何参量,并将结果放入从 A1、B1、C1 和 D1 开始的 Excel 列中。如果发生错误,消息框将显示错误文本。此函数假定 MWInitApplication 先前已被调用。
Sub GenVectors()
Dim aClass As Object
Dim aUtil As Object
Dim v As Variant
Dim R1 As Range
Dim R2 As Range
Dim R3 As Range
Dim R4 As Range
On Error GoTo Handle_Error
Set aClass = CreateObject("mycomponent.myclass.1_0")
Set aUtil = CreateObject("MWComUtil.MWUtil")
Set R1 = Range("A1")
Set R2 = Range("B1")
Set R3 = Range("C1")
Set R4 = Range("D1")
Call aClass.randvectors(4, v)
Call aUtil.MWUnpack(v,0,True,R1,R2,R3,R4)
Exit Sub
Handle_Error:
MsgBox (Err.Description)
End Sub
Sub MWDate2VariantDate(pVar)
将 MATLAB 的输出日期转换为 Variant 日期。
参数
| 参量 | 类型 | 描述 |
|---|---|---|
|
|
| 要转换的 |
返回值
无。
备注
MATLAB 将日期处理为双精度浮点数,其中 0.0 代表 0/0/00 00:00:00。默认情况下,作为编译的 MATLAB 函数的输出参数的数字日期被传递为 Double,需要按 COM 日期偏差减少并强制转换为 COM 日期。MWDate2VariantDate 方法执行此转换,并将字符向量形式的日期转换为 COM 日期类型。
示例
此示例使用 MWDate2VariantDate 处理从以下 MATLAB 函数编译的方法返回的数字日期。
function x = getdates(n, inc)
y = now;
for i=1:n
x(i,1) = y + (i-1)*inc;
end
此函数生成一个长度为 n 数值列向量,表示从当前日期和时间开始的日期,每个元素以 inc 天为增量。假设该函数包含在名为 myclass 的类中,该类包含在名为 mycomponent 组件中,版本为 1.0。子程序以 Excel 范围和 Double 作为输入,并将生成的日期放入提供的范围内。如果发生错误,消息框将显示错误文本。此函数假定 MWInitApplication 先前已被调用。
Sub GenDates(R As Range, inc As Double)
Dim aClass As Object
Dim aUtil As Object
On Error GoTo Handle_Error
Set aClass = CreateObject("mycomponent.myclass.1_0")
Set aUtil = CreateObject("MWComUtil.MWUtil")
Call aClass.getdates(1, R, R.Rows.Count, inc)
Call aUtil.MWDate2VariantDate(R)
Exit Sub
Handle_Error:
MsgBox (Err.Description)
End Sub