Я пытаюсь получить данные в именованном диапазоне Excel для надстройки на основе F #. Я хочу иметь возможность использовать именованные диапазоны в любом месте книги, а не только на конкретном листе.
let xlRange (xl:Microsoft.Office.Interop.Excel.Application, name:string) =
let name_list = xl.ThisWorkbook.Names:Microsoft.Office.Interop.Excel.Names
let mutable result=null
for n in name_list do
let nn = n :?> Microsoft.Office.Interop.Excel.Name
if nn.Name = name then
let range=nn.RefersToRange
result <- range.Value2 :?> obj[,]
result
Приведенный выше код работает, но мне он не нравится, потому что мне пришлось использовать изменяемый и императивный стиль. Проблема в том, что коллекция Excel.Names ведет себя не очень хорошо. Например
let name_seq = Seq.toList name_list
дает
Тип "Имена" несовместим с типом "seq‹'a>"
Есть ли более идиоматический способ F # сделать это?
Seq.toList (Seq.cast name_list)
, возможно, даже укажите тип (например,let name_seq : ... = ...
). - person Ramon Snir   schedule 07.07.2012