【问题标题】:Excel DNA UDF obtain unprocessed values as inputsExcel DNA UDF 获取未处理的值作为输入
【发布时间】:2020-12-09 09:41:25
【问题描述】:

我在 F# 中编写了几个帮助函数,使我能够通过 COM/PIA 接口处理 Excel 的动态特性。但是,当我在 Excel-DNA UDF 中使用这些函数时,它们无法按预期工作,因为 Excel-DNA 正在从 excel 中预处理数组中的值。 例如null 变成ExcelDna.Integration.ExcelEmpty

这会干扰我自己的验证代码,该代码预期 null。我可以通过在我的模式匹配中添加一个额外的案例来解决这个问题:

let (|XlEmpty|_|) (x: obj) =
    match x with
    | null -> Some XlEmpty
    | :? ExcelDna.Integration.ExcelEmpty -> Some XlEmpty
    | _ -> None

但是,转换然后再次转换感觉就像浪费。有没有办法告诉 Excel-DNA 不要对 UDF 中的范围值进行额外处理并提供与 COM/PIA 接口等效的值?即Range.Value XlRangeValueDataType.xlRangeValueDefault

编辑: 我将我的论点声明为obj,如下所示:

[<ExcelFunction(Description = "Validates a Test Table Row")>]
let isTestRow (headings: obj) (row: obj) =
    let validator = TestTable.validator
    let headingsList = TestTable.testHeadings
    validateRow validator headingsList headings row

【问题讨论】:

标签: f# excel-dna excel-udf


【解决方案1】:

我做了更多的挖掘工作,@Jim Foye 提出的问题也证实了这一点。对于 UDF,Excel-DNA 在 C API 而不是 COM 上工作,因此必须进行自己的编组。可能的值显示在此文件中:

https://github.com/Excel-DNA/ExcelDna/blob/2aa1bd9afaf76084c1d59e2330584edddb888eb1/Distribution/Reference.txt

使用ExcelEmpty(用户提供了一个空单元格)的原因是对于UDF,参数也可以是ExcelMissing(用户没有提供参数),这可能都是null,并且有需要消除歧义。

我将调整我的模式匹配以与 COM 编组和 ExcelDNA 编组兼容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    相关资源
    最近更新 更多