.NET 4.0的F#和Excel集成(Visual Studio 2010 Beta 1)

任何人都可以给一个网页链接或演示如何使用.NET 4.0(Visual Studio 2010 Beta 1)的F#和Excel集成?

我知道如何在CTP版本中做到这一点,但据我所知,在.NET 4.0(Visual Studio 2010 Beta 1)中应该更简单。

最新的F#CTP版本(Visual Studio 2010 Beta1)中没有添加“秘诀”来提高Office互操作性。 也许你有F#混淆了C#对Dynamic的新支持 。

但是,F#中的Office互操作与C#相同 – 您可以使用本机COM API或更新的托pipe的Visual Studio Tools for Office(VSTO)库。 不幸的是,F#没有用于创build像C#这样的VSTO插件的UIdevise器,因此执行Office interop最简单的方法就是使用COM API。

以下代码片段将创build一个Excel工作表,其中包含有关“我的图片”文件夹中图片的信息:

#r "Microsoft.Office.Interop.Excel" open System open System.IO open System.Reflection open Microsoft.Office.Interop.Excel let app = ApplicationClass(Visible = true) let sheet = app.Workbooks .Add() .Worksheets.[1] :?> _Worksheet let setCellText (x : int) (y : int) (text : string) = let range = sprintf "%c%d" (char (x + int 'A')) (y+1) sheet.Range(range).Value(Missing.Value) <- text let printCsvToExcel rowIdx (csvText : string) = csvText.Split([| ',' |]) |> Array.iteri (fun partIdx partText -> setCellText partIdx rowIdx partText) let rec filesUnderFolder basePath = seq { yield! Directory.GetFiles(basePath) for subFolder in Directory.GetDirectories(basePath) do yield! filesUnderFolder subFolder } // Print header printCsvToExcel 0 "Directory, Filename, Size, Creation Time" // Print rows filesUnderFolder (Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)) |> Seq.map (fun filename -> new FileInfo(filename)) |> Seq.map (fun fileInfo -> sprintf "%s, %s, %d, %s" fileInfo.DirectoryName fileInfo.Name fileInfo.Length (fileInfo.CreationTime.ToShortDateString())) |> Seq.iteri (fun idx str -> printCsvToExcel (idx + 1) str) 

简单地写一个空的VSTO shell,然后创buildF#程序集DLL并使用它。 我总是使用优秀的VS2010devise师,然后将其链接到F#DLL,你将得到最好的两个世界….