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

3

有谁能够提供一个网站链接或者演示如何在.NET 4.0 (Visual Studio 2010 Beta 1)中使用F#和Excel集成呢?

我知道如何在CTP版本中实现,但据我所知,在.NET 4.0 (Visual Studio 2010 Beta 1)中应该更加简单。

2个回答

11
最新的F# CTP版本(Visual Studio 2010 Beta1)中没有添加任何“秘密配方”来改善Office互操作性。也许您将F#与C#的新的动态支持混淆了。
但是,F#中的Office互操作性与C#相同-可以使用原生的COM API或更新的、托管的Visual Studio Tools for Office(VSTO)库。不幸的是,F#没有创建VSTO插件的UI设计师,因此执行Office互操作的最简单方法是使用COM API。
以下代码片段创建一个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)

2
嗨,Chris,这太疯狂了。我刚看了Dom Syme的这个视频http://channel9.msdn.com/Blogs/David+Gristwood/An-F-Tutorial-with-Don-Syme-2-of-4,在其中他使用F#进行了一些探索性编码。我觉得那很酷。能够将Excel作为前端就让人难以置信。谢谢! - gjvdkamp

1

只需编写一个空的 VSTO shell,然后创建 F# 程序集 DLL 并使用它。我总是使用出色的 VS2010 设计工具,然后将其链接到 F# DLL 中,这样您就可以充分发挥两者的优势...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接