簡體   English   中英

使用F#自動化Excel 2010

[英]Automating Excel 2010 using F#

我一直在尋找常見問題解答告訴我如何打開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#.....如果你從另一個角度看它如果沒有人會使用它 - 為什么要在第一時間創建它? 我想你可以說洞穴男人是不是通過將兩根棍子揉在一起進行實驗和起火 - 我們現在在哪里才能發明火柴?

雖然一個完整的答案會很好,但我更喜歡一些指示,以保持我的挑戰。

最后但並非最不重要 - 謝謝你不厭其煩地回應!

我不認為它們是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#就是一種meh。 你可以說F#有點像圖形卡編程語言,而C#是一種通用的CPU編程語言。 使用C#可以很好地運行,但是在F#上運行得更好的東西在它上運行更好。

但是,如果您真的想要走這條路線,我的建議是嘗試使用您已經知道的Office API,但使用F#語法。 如果在某些時候您真的不知道如何執行特定任務,請在stackoverflow上使用您的代碼詢問有關它的問題,並且確切地希望您這樣做。 與廣泛的無所不包的問題相比,這些問題得到的回答非常快,所以你不會等待很長時間。 (程序員似乎喜歡具體答案的精確問題^^)

我希望它有所幫助。

我發現這個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”(我沒有足夠的聲譽發布第三個鏈接)。

插口

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM