【问题标题】:Automating Excel 2010 using F#使用 F# 自动化 Excel 2010
【发布时间】:2016-05-10 18:48:57
【问题描述】:

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

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

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

更新

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

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

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

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

最后但同样重要的是 - 感谢您不厌其烦地回复!

【问题讨论】:

  • 为什么 F# 不是标准的 C# 或 VB?

标签: visual-studio visual-studio-2010 excel f# excel-2010


【解决方案1】:

我不认为它们是 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 上用您的代码询问有关它的问题,并确切地希望您想做。与广泛的包罗万象的问题相比,这些问题得到的回答快得离谱,所以你不会等太久。 (程序员似乎喜欢有具体答案的精确问题^^)

希望对你有所帮助。

【讨论】:

    【解决方案2】:

    我发现这个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)
    

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

    在 Excel 中获得结果需要使用多个不可变值,每个值都由公式驱动。 Excel 有一个出色的用户界面,一个可爱的世界模型——我喜欢行、列和单元格——但要自动化或自定义事物需要宏。既然可以使用 F#,为什么还要学习这个?公式和不可变值是其设计的基础。

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

    杰克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多