スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

F#入門 他のアプリとの連携編 そのExcel(2)

今回はrangeを使っての書き込みを紹介します。

前回と同様に次のようにしておきます。 

#if INTERACTIVE
#r "office.dll"
#r "Microsoft.Office.Interop.Excel.dll"
#endif

open Microsoft.Office.Interop.Excel

let app = new ApplicationClass(Visible = true)

let workbook = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet)
let worksheet = workbook.Worksheets.[1] :?> Worksheet

c2セルに5と書き込むには次のようにします。

> worksheet.Range("C2").Value2 <- 5;;
val it : unit = ()

c3からF3まで 1 2 3と書き込むには次のようにします。

> worksheet.Range("C3","E3").Value2 <- [|1;2;3|];;
val it : unit = ()

長方形の領域に書き込むにはArray2Dを利用して例えば次のようにします。

例として次のような配列を準備します。

> let arr2d = Array2D.init 2 3 (fun i j -> sprintf "row:%d col:%d" i j );;

val arr2d : string [,] = [["row:0 col:0"; "row:0 col:1"; "row:0 col:2"]
                          ["row:1 col:0"; "row:1 col:1"; "row:1 col:2"]]
                         
> worksheet.Range("C2","E3").Value2 <- arr2d;;
val it : unit = ()

とすると


702-1.jpg

となります。

上のメソッドでは左上と右下の位置を両方とも指定しなければならないとダメなので、左上と配列だけで書き込めるような関数を定義してみます。

> let setArr (ws:Worksheet) (nTag : string) (arr2d: 'a[,]) =
    let (r,c) = nToRC nTag
    let rowEnd = r + (Array2D.length1 arr2d) - 1
    let colEnd = c + (Array2D.length2 arr2d) - 1
    let endNTag = (rToN colEnd) + rowEnd.ToString()
    ws.Range(nTag,endNTag).Value2 <- arr2d;;

val setArr : Worksheet -> string -> 'a [,] -> unit

なおnToRCとrToNは前回定義した関数です。

これで
> setArr worksheet "C3" arr2d;;
val it : unit = ()
とすると
worksheet.Range("C2","E3").Value2 <- arr2d
と同じ結果が得られます。

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

T GYOUTEN

Author:T GYOUTEN
F#と英単語とフリーソフトと読書に興味があります。
ホームページでフリーソフトも公開しています。どぞ御贔屓に。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
フリーエリア
フリーエリア
blogram投票ボタン
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。