主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

类 MWUtil

MWUtil 类包含一组用于数组处理和应用程序初始化的静态实用方法。此类在内部作为单例实现(每个 Microsoft® Excel® 实例仅有一个此类的全局实例)。在每个使用该类型的模块的全局范围内声明一个此类型的变量是最有效的。下面列出了 MWUtil 的方法。

函数原型使用 Visual Basic® 语法。

Sub MWInitApplication(pApp As Object)

使用当前的 Microsoft Excel 实例初始化库。

参数

参量类型描述

pApp

Object

对当前 Excel 应用程序的有效引用

返回值

无。

备注

对于使用 MATLAB® Compiler™ 创建的 COM 组件的 Excel 每个会话,都必须调用一次此函数。如果对任何 MATLAB Compiler SDK™ COM 组件的成员类进行方法调用,并且库尚未初始化,则会生成错误。

示例

此 Visual Basic 示例使用当前 Excel 实例初始化 MWComUtil 库。一个名为 ObjectMCLUtil 类型的全局变量保存了 MWUtil 类的实例,另一个名为 BooleanbModuleInitialized 类型的全局变量存储了初始化过程的状态。私有子程序 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)

参数

参量类型描述

pApp

Object

仅从 Excel 应用程序调用时才有效引用

非 Excel COM 客户端传入 Empty

返回值

无。

备注

调用此函数传递 MATLAB Runtime 选项(nojvmlogfile 等)。每个进程调用一次此函数。

示例

此 Visual Basic 示例使用当前 Excel 实例初始化 MWComUtil 库。一个名为 ObjectMCLUtil 类型的全局变量保存了 MWUtil 类的实例,另一个名为 BooleanbModuleInitialized 类型的全局变量存储了初始化过程的状态。私有子程序 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。)

参数

参量类型描述

pVarArg

Variant

接收生成的数组

[Var0], [Var1], ...

Variant

要打包到数组中的 Variant 的可选列表。可以传递 0 到 32 个参量。

返回值

无。

备注

此函数总是在处理列表之前释放 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

参数

参量类型描述

VarArg

Variant

要处理的 Variant 的输入数组

nStartAt

Long

数组中的可选起始索引(从零开始)用于开始处理。默认值 = 0

bAutoResize

Boolean

可选的自动调整大小标志。如果此标志为 True,则任何 Excel 范围输出参量都会调整大小以适合要复制的 Variant 的维度。调整大小过程是相对于所提供范围的左上角进行的。默认值 = False

[pVar0],[pVar1], ...

Variant

可选的 Variant 列表,用于接收 VarArg 中包含的数组项。可以传递 0 到 32 个参量。

返回值

无。

备注

此函数可以在一次调用中或通过使用 Variant 参数的多次调用来处理 nStartAt 数组。

示例

此示例使用 MWUnpackvarargout 元胞处理为多个 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 日期。

参数

参量类型描述

pVar

Variant

要转换的 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