5

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

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

作为 F# 的新手,如果有人可以为我提供答案或一些建议,我将不胜感激?

更新

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

我很高兴地说,尽管我是一个新手(除了 Forth、VBA 和 Excel 2003、2007 和 2010 以及 Visual Basic),我可以在 VB、VBA 和 C# 中做到这一点,因为我已经在医疗行业退休了理由,不幸的是,我手上有很多时间,我喜欢不断地给自己设定挑战,以保持我的小灰色细胞活跃,并成为尝试新语言的傻瓜......好吧!

F# 现在是 Visual Studio 2010 的一个组成部分,所以我想 - 为什么不呢。考虑一下 - 如果我们不愿意使用或至少尝试一种新语言 - 我总是想知道我是否更喜欢它而不是 VBA、VB、C# ..... 如果你从另一个角度来看它视图,如果没有人会使用它 - 为什么要首先创建它?我想你可以说,如果穴居人没有试验并通过摩擦两根棍子来生火——我们现在会在哪里,火柴会被发明出来吗?

虽然一个完整的答案会很好,但我更喜欢一些指示,以继续我的挑战。

最后但并非最不重要 - 感谢您不厌其烦地回复!

4

2 回答 2

3

我不认为它们是 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 并非完全设计为易于从函数式语言中使用。它可以完成,但这个任务特别适合 C#/VB.NET。

如果你真的想享受F#,我建议你在它的实力真正体现出来的地方使用。我的个人经验是,当涉及大量数学时,函数式语言非常棒。如果您想在应用程序中轻松引入并行性,这也很棒(因为 F# 代码通常没有副作用)。因此,任何需要对大量数据进行数据处理的东西都非常适合它。但是对于主要包括将一堆 API 调用放在一个外部库中的任务,F# 就有点意思了。您可以说 F# 有点像图形卡编程语言,而 C# 是通用 CPU 编程语言。很多东西在 C# 上运行得更好,但在 F# 上运行得更好的东西在它上面运行更好。

但如果你真的想走这条路,我的建议是尝试使用你已经知道的 Office API,但使用 F# 语法。如果在某些时候您真的不知道如何执行特定任务,请使用您的代码在 stackoverflow 上询问有关它的问题,并且您确实想要这样做。与广泛的包罗万象的问题相比,这些问题得到的回答快得离谱,所以你不会等太久。(程序员似乎喜欢有具体答案的精确问题^^)

我希望它有一点帮助。

于 2011-02-11T20:40:56.970 回答
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# 时,为什么要学习这个?公式和不可变值是其设计的基础。

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

杰克

于 2016-05-10T10:48:57.667 回答