使用F#自动化Excel 2010

4
我一直在寻找一个FAQ告诉我如何打开Excel工作簿/工作表,以及完成后如何保存文件。
我注意到在大多数FAQ和所有我购买的F#书籍中,只介绍了如何创建新的工作簿/工作表,但没有说明如何打开或保存它。
作为F#的新手,我非常感激任何人能够友好地提供答案或几个指针。
更新
那么为什么选择F#而不是C#或VB?
我很高兴地说,尽管我是新手(除了Forth、VBA和Excel 2003、2007和2010以及Visual Basic之外),我可以在VB、VBA和C#中完成这项任务。由于我已因健康原因退休,在我手头时间充足的情况下,我喜欢不断地挑战自己,以保持我的小灰细胞活跃,并且喜欢尝试新语言……呃!
F#现在是Visual Studio 2010的一个重要组成部分,所以我想-为什么不呢?请考虑这一点-如果我们不愿意使用或至少尝试新的语言-我会一直想知道是否比起VBA、VB、C#等更喜欢它......从另一个角度看,如果没有人使用它-为什么要首先创建它?我想你可以说,如果穴居人没有试验并通过擦两个木棍制造火-我们现在会在哪里,会有火柴吗?
虽然完整的答案挺好,但我更喜欢一些指针,以保持我的挑战继续进行。
最后但并非最不重要的是-谢谢您的回复!

为什么不使用标准的C#或VB,而是选择F#? - Bonshington
2个回答

3

我认为没有针对Office的特定F#库,因此您将使用与VB.NET/C#相同的精确相同的.NET库。 F#是一种.NET语言,因此可以在F#中完成C#中可完成的任何操作(但您可能已经知道了这一点 :))。 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并不是为了从功能语言中轻松使用而设计的。虽然这是可行的,但是特别是这个任务更适合使用C#/VB.NET。
如果您真的想享受F#,我建议您在其强项领域使用它。我的个人经验是,当涉及大量数学时,函数式语言非常棒。如果您想要在应用程序中轻松引入并行性(因为F#代码通常没有副作用),那么它也非常出色。因此,任何需要对大量数据进行数据处理的任务都非常适合它。但是对于主要由一堆API调用组成的任务,F#有点差。您可以说F#有点像图形卡编程语言,而C#则是通用的CPU编程语言。许多东西在C#上运行得更好,但在F#上运行得更好的东西确实运行得更好。
但是,如果您真的想走这条路,我的建议是尝试使用Office API,就像您已经知道的那样,但使用F#语法。如果您真的不知道如何执行特定任务,请在stackoverflow上问一个问题,附上您的代码和您想要做什么。与广泛全面的问题相比,这些问题得到的回答速度非常快,因此您不必等待太久。(程序员似乎喜欢具有特定答案的精确问题^^)
希望这有所帮助。

1

我发现这个http://iouri-khramtsov.blogspot.co.uk/2011/12/automating-excel-with-f.html提供的建议非常有用。简单来说,您可以使用以下代码:

#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)

使用F#与Excel似乎天生就是一对。在Excel中得到结果需要使用几个不可变的值,每个值都由公式驱动。Excel拥有出色的用户界面,美丽的世界模型 - 我喜欢行、列和单元格 - 但要自动化或自定义事物则需要宏。学习这个有何必要呢?你可以使用F#。公式和不可变值是其设计的基础。
理想情况下,您会自己编写公式作为用户定义函数(UDFs),也使用F# - 参见http://excel-dna.net/。然后,也许您希望使用对象/类型进行一些有趣的操作 - 查找“github com mndrake ExcelObjectHandler”(我没有足够的声望来发布第三个链接)。
杰克

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