2009-07-31 7 views

Répondre

12

Il n'y a pas de 'sauce secrète' ajoutée à la dernière version F # CTP (Visual Studio 2010 Beta1) pour améliorer Office interop. Peut-être avez-vous F # confus avec C#'s new support for Dynamic. Toutefois, Office interop en F # est identique à C# - vous pouvez utiliser les API COM natives ou les nouvelles bibliothèques Visual Studio Tools pour Office (VSTO) gérées. Malheureusement, F # n'a pas les concepteurs d'interface utilisateur pour créer des compléments VSTO comme C#, donc la façon la plus simple d'utiliser Office interop est d'utiliser les API COM.

L'extrait suivant crée une feuille de calcul Excel avec des informations sur les images dans votre dossier Mes images:

#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

Salut Chris, c'est fou. Je regardais juste cette vidéo par Dom Syme http://channel9.msdn.com/Blogs/David+Gristwood/An-F-Tutorial-with-Don-Syme-2-of-4 où il fait une codig explorative avec F # . Je pensais que c'était cool. Être capable de claquer sur Excel comme front end juste boggles l'esprit. Merci! – gjvdkamp

1

écrire simplement une coquille vide VSTO puis créer F # DLLs d'assemblage et de l'utiliser. Je suis toujours en utilisant d'excellents concepteurs VS2010, puis le lier à DLL F # et vous obtiendrez le meilleur des deux mondes ....

Questions connexes