2009-07-31 15 views

答えて

12

Office interopを改善するために、最新のF#CTPリリース(Visual Studio 2010 Beta1)に「秘密のソース」は追加されていません。あなたはF#をC#'s new support for Dynamicと混同しているかもしれません。

ただし、F#のOffice相互運用機能はC#と同じです。ネイティブのCOM APIまたは管理された新しいVisual Studio Tools for Office(VSTO)ライブラリを使用できます。残念ながら、F#にはC#のようなVSTOアドインを作成するためのUIデザイナーがいないため、Office interopを実行する最も簡単な方法は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) 
+2

こんにちはクリス、これは非常識です。私はちょうど、このビデオを見ていたDom Syme http://channel9.msdn.com/Blogs/David+Gristwood/An-F-Tutorial-with-Don-Syme-2-of-4彼は息を探検コーデックでF# 。私はそれがクールだと思った。フロントエンドとしてExcelを叩くことができれば、心を揺さぶるだけです。ありがとう! – gjvdkamp

1

単に空のVSTOシェルを書き込み、F#アセンブリDLLを作成し、それを使用します。私はいつも優れたVS2010デザイナーを使用していて、それをF#DLLにリンクしています。そして、あなたは両方の世界から最高のものを手に入れます。

関連する問題