使用F#自动化Excel 2010

我一直在寻找一个常见问题,告诉我如何打开一个Excel工作簿/工作表,以及如何完成后保存文件。

我注意到,在大多数常见问题和所有我在F#上购买的书籍中,都展示了如何创build一个新的工作簿/工作表,但从未显示如何打开或保存它。

作为F#的新手,我会非常感激,如果有人能够给我一个答案或者可能是几个指针?

更新

至于为什么F#而不是C#或VB?

我很高兴地说,尽pipe作为一个新手(除了Forth,VBA和Excel 2003,2007和2010年和Visual Basic),我可以做到这一点在VB,VBA和C#,因为我已经退休的医疗因为有很多时间在我的手上,所以我喜欢不断地挑战自己,让自己的小灰色单元保持活跃,成为尝试新语言的吸盘。

F#现在是Visual Studio 2010的一个整体部分,所以我想 – 为什么不呢。 考虑一下 – 如果我们不愿意使用或至less尝试一种新的语言 – 我会一直在想,如果我可能更喜欢它的VBA,VB,C#…..,如果你从另一个angular度看待它如果没有人会使用它 – 为什么要创build它呢? 我想你可以说洞穴男人是否没有尝试过,并且把两根棍子揉在一起发火 – 我们现在在哪里,而且火柴会被发明出来?

虽然一个完整的答案是好的,但我更喜欢一些指标,以保持我的挑战。

最后但并非最不重要的 – 感谢您煞费苦心应对!

我不认为他们是Office的一个特定的F#库,所以你将只使用在VB.NET / C#中使用的完全相同的.NET库。 F#是一种.NET语言,所以在C#中可以完成的任何事情都可以在F#中完成(但是您可能已经知道了:))。 API调用将完全相同,只是它们将使用F#语法而不是VB / C#语法来完成。 例如,看起来像这样的东西

public void SaveMyWorkbook() { string filePath = @"C:\failworkbooks\catfail.xlsx"; workbook.Save(filepath); } 

将在F#中表示为

 let filePath = "C:\\failworkbooks\\catfail.xlsx"; let saveWorkbook() = workbook.Save(filePath) |> ignore //if the Save method return something 

现在,你很快就会意识到,API的devise并不是从function语言中轻松使用的。 它可以完成,但是这个任务特别适合C#/ VB.NET。

如果你真的想享受F#,我build议你在其实力显示的领域使用。 我个人的经验是,当涉及很多math时,函数式语言是非常棒的。 如果你想在你的应用程序中轻松地引入并行性,也是非常棒的(因为F#代码通常是无副作用的)。 所以任何需要处理大量数据的数据都是完美的。 但是对于主要由将一堆API调用放到外部库中的任务来说,F#就是那种样子了。 你可以说F#就像是一种graphics卡编程语言,而C#是一种通用的CPU编程语言。 很多事情用C#运行得更好,但在F#上运行得更好的东西真的更好。

但是,如果你真的想走这条路,我的build议是尝试使用Office API,就像你已经知道的那样,但是使用F#语法。 如果在某个时候,你真的不知道如何做一个特定的任务,请问你的代码与stackoverflow的问题,并确切地希望你想要做的。 那些问题比广泛的包罗万象的问题得到快速的回答,所以你不会等太久。 (程序员似乎喜欢精确的问题,具体答案^^)

我希望它有一点帮助。

我发现这个http://iouri-khramtsov.blogspot.co.uk/2011/12/automating-excel-with-f.html有用的build议。 简单地说,你会使用这样的东西:

 #r "Microsoft.Office.Interop.Excel" // Assuming it's a script let excel = ApplicationClass(Visible = true) let openFileName = @"C:\MyDir\MyFilenameToOpen.xls" excel.Workbooks.Open(openFileName) // Do stuff let savedFileName = @"C:\MyDir\MyFilename.xls" workbook.SaveAs(savedFileName) 

在Excel中使用F#似乎是天作之合。

在Excel中获得结果需要使用几个不可变的值,每个值都由公式驱动。 Excel有一个很棒的用户界面,一个可爱的世界模型 – 我喜欢行,列和单元格,但是自动化或者定制事物需要macros。 为什么学习这个时可以使用F#? 公式和不可变的值是其devise的基础。

理想情况下,您可以在F#中自己编写公式作为用户定义函数(UDF) – 请参阅http://excel-dna.net/ 。 然后,也许,你会想对对象/types做一些有趣的事情 – 寻找“github com mndrake ExcelObjectHandler”(我没有足够的声望发布第三个链接)。

插口