任何人都可以提供Web链接或在此演示如何使用.NET 4.0(Visual Studio 2010 Beta 1)进行F#和Excel集成?
我知道如何在CTP版本中执行此操作,但据我所知,它应该在.NET 4.0(Visual Studio 2010 Beta 1)中更简单.
Chr*_*ith 12
最新的F#CTP版本(Visual Studio 2010 Beta1)中没有添加"秘密酱"来改进Office互操作.也许你把F#与C#对Dynamic的新支持混淆了.
但是,F#中的Office互操作与C#相同 - 您可以使用本机COM API或较新的托管Visual Studio Tools for Office(VSTO)库.不幸的是,F#没有用于创建像C#这样的VSTO加载项的UI设计器,因此执行Office互操作的最简单方法是使用COM API.
以下代码段创建一个Excel工作表,其中包含有关"我的图片"文件夹中图片的信息:
#r "Microsoft.Office.Interop.Excel"
open System
open System.IO
open System.Reflection
open Microsoft.Office.Interop.Excel
let app = ApplicationClass(Visible = true)
let sheet = app.Workbooks
.Add()
.Worksheets.[1] :?> _Worksheet
let setCellText (x : int) (y : int) (text : string) =
let range = sprintf "%c%d" (char (x + int 'A')) (y+1)
sheet.Range(range).Value(Missing.Value) <- text
let printCsvToExcel rowIdx (csvText : string) =
csvText.Split([| ',' |])
|> Array.iteri (fun partIdx partText -> setCellText partIdx rowIdx partText)
let rec filesUnderFolder basePath =
seq {
yield! Directory.GetFiles(basePath)
for subFolder in Directory.GetDirectories(basePath) do
yield! filesUnderFolder subFolder
}
// Print header
printCsvToExcel 0 "Directory, Filename, Size, Creation Time"
// Print rows
filesUnderFolder (Environment.GetFolderPath(Environment.SpecialFolder.MyPictures))
|> Seq.map (fun filename -> new FileInfo(filename))
|> Seq.map (fun fileInfo -> sprintf "%s, %s, %d, %s"
fileInfo.DirectoryName
fileInfo.Name
fileInfo.Length
(fileInfo.CreationTime.ToShortDateString()))
|> Seq.iteri (fun idx str -> printCsvToExcel (idx + 1) str)
Run Code Online (Sandbox Code Playgroud)