F# Excel DNA UDF获取未处理的值作为输入
我用F#编写了几个helper函数,使我能够通过COM/PIA接口处理Excel的动态特性。但是,当我在Excel DNA UDF中使用这些函数时,它们不会像预期的那样工作,因为Excel DNA正在预处理Excel中数组中的值。 e、 g.F# Excel DNA UDF获取未处理的值作为输入,f#,excel-dna,excel-udf,F#,Excel Dna,Excel Udf,我用F#编写了几个helper函数,使我能够通过COM/PIA接口处理Excel的动态特性。但是,当我在Excel DNA UDF中使用这些函数时,它们不会像预期的那样工作,因为Excel DNA正在预处理Excel中数组中的值。 e、 g.null变为ExcelDna.Integration.ExcelEmpty 这干扰了我自己的验证代码,该代码预期为null。我可以通过在模式匹配中添加一个附加案例来解决此问题: let (|XlEmpty|_|) (x: obj) = match x
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接口?i、 e.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
[]
let Isestrow(标题:obj)(行:obj)=
让validator=TestTable.validator
让headingsList=TestTable.testHeadings
validateRow validator标题列表标题行
我做了更多的挖掘,@Jim Foye建议的问题也证实了这一点。对于UDF,Excel DNA通过C API而不是COM工作,因此必须自己进行封送处理。可能的值显示在此文件中:
使用ExcelEmpty
(用户提供了一个空单元格)的原因是,对于UDF,参数也可以是ExcelMissing
(用户没有提供参数),这两个参数可能都是合理的null
,需要消除歧义
我将调整模式匹配,使其与COM封送和ExcelDNA封送兼容。我已经做了更多的挖掘,@Jim Foye建议的问题也证实了这一点。对于UDF,Excel DNA通过C API而不是COM工作,因此必须自己进行封送处理。可能的值显示在此文件中: 使用
ExcelEmpty
(用户提供了一个空单元格)的原因是,对于UDF,参数也可以是ExcelMissing
(用户没有提供参数),这两个参数可能都是合理的null
,需要消除歧义
我将调整模式匹配以与COM封送和ExcelDNA封送兼容。是否将UDF参数声明为对象?可能会有帮助。您是否将UDF参数声明为对象?可能会有帮助。