【发布时间】: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
【问题讨论】:
-
您是否将您的 UDF 参数声明为对象? stackoverflow.com/questions/56071879/… 可能会有所帮助。