我正在用 F# 和 Excel-DNA 重写我的 Excel VBA 加载项。下面的公式1有效。它遍历当前选定的单元格并将修剪应用于每个单元格值。
Formula2 是我应用函数式和 F# 概念的失败尝试。我不确定如何将范围返回到 Excel。公式必须返回一个单位。
有人可以帮助我吗?
一级方程式(作品):
let Trim (rng:Range) =
for cell in rng.Cells do
let cel = cell :?> Range
if not (cel :? ExcelEmpty) then
cel.Formula <- cel.Formula.ToString().Trim()
公式 2(不起作用):
let Trim2 (values:obj[,]) =
values
|> Seq.cast<obj>
|> Seq.map( fun x -> x.ToString().Trim() )
有人询问返回单元或调用函数的原因。那就是下面。
type public MyRibbon() =
inherit ExcelRibbon()
override this.GetCustomUI(ribbonId) =
"bunch of xml here"
member this.OnButtonPressed (control:IRibbonControl) =
let app = ExcelDnaUtil.Application :?> Application
let rng = app.Selection :?> Range
let rng2 = app.Selection :?> obj
match control.Id with
| "AddIfError" -> RibFuncs.RangeFuncs.AddIfError app rng
| "Trim" -> RibFuncs.RangeFuncs.Trim rng
|> ignore
| _ -> ()