F#으로 Word 문서 만들기

9887 단어 F#Word
F#에서 Word 문서를 작성해 보았습니다.
C#에서도 좋았습니다만, R유저(dplyr)였기 때문에 F#가 확실히 오기 때문입니다.
라이브러리로 Microsoft.Office.Interop.Word를 사용하면 Word를 편집할 수 있습니다.

환경



Visual studio 2017
Visual F#

프로젝트 만들기, 참조 설정



[파일]→[신규작성]→[프로젝트]
[Visual F#]→[콘솔 애플리케이션]→프로젝트 만들기

솔루션 탐색기 → 참조 설정 오른쪽 클릭 → 참조 추가 → Microsoft.Office.Interop.Word 및 Office 선택




Program.fs를 작성합니다.let mutable app = new Applicatio 정도까지 쓰면 인텔리센스가 듣고 마음대로 라이브러리가 위쪽에 추가됩니다. 가능한 한 편하게 합시다.
나오지 않는 경우는 Ctrl+Space를 누르면 인텔리센스가 나옵니다.




C#과 같이 쓰면 최종적으로 다음과 같은 코드가 됩니다.

Propram.fs
open Microsoft.Office.Interop.Word

// F# の詳細については、http://fsharp.org を参照してください
// 詳細については、'F# チュートリアル' プロジェクトを参照してください。

[<EntryPoint>]
let main argv = 
    let mutable app = new ApplicationClass()//Wordを開く
    app.Visible <- false//Wordが画面に表示されないようにする

    let mutable doc = app.Documents.Add()//Wordの中に文書を開く
    doc.Range().Text <- "Hello, World!\n"//文書の内容を書き換え

    let mutable endOfLines = (doc.Range().End - 1) :> obj //文末を取りだしてobj型にアップキャスト
    doc.Range(ref endOfLines).Text <- "Hello, Word!\n"//obj型を参照型にして範囲を指定後、文章を追加

    let filename = (System.IO.Directory.GetCurrentDirectory() + @"\HelloWord.docx") :> obj
    doc.SaveAs2000(ref filename) //保存

    doc.Close() //文書を閉じる
    app.Quit() //Wordを閉じる

    0 // 整数の終了コードを返します


작성한 후 Ctrl+F5를 누르면 앱이 시작됩니다.
끝나면 프로젝트 이름\bin\debug 폴더에 HelloWord.docx가 생성됩니다.


덤 : 대입 연산자를 미워하는 당신에게



이번, C#의 코드를 참고로 했습니다만, 코드를 보면(자), 대입(바인드) 너무 아닐까? 라고 생각했습니다. 실망합니다.
필자는 할당 연산자를 미워하는 R 사용자 그래서 F#인데 다시 한 번 마음이 가득 채워 파이프라인 연산자로 다시 썼습니다.

Program.fs
open Microsoft.Office.Interop.Word

// F# の詳細については、http://fsharp.org を参照してください
// 詳細については、'F# チュートリアル' プロジェクトを参照してください。

[<EntryPoint>]
let main argv = 
    let mutable app = new ApplicationClass() //Word開く
    app.Visible <- false //画面に表示させない

    let mutable doc = app.Documents.Add() //文書開く

    "Hello, World!\n" 
    |> fun x -> doc.Range().Text <- x //文書内容書き換え

    "Hello, Word!\n" //文末に書き加える(内容と書込場所の2変数必要)
    |> fun x -> doc.Range().End //ネストして1変数関数にカリー化
                |> fun y -> y - 1 //0スタートのため
                |> fun y -> ref (y :> obj) //参照渡し用にアップキャスト
                |> fun y -> doc.Range(y).Text <- x //代入

    "HelloWord.docx"
    |> fun x -> System.IO.Directory.GetCurrentDirectory() + @"\" + x //実行場所の情報を加える
    |> fun x -> ref (x :> obj) //参照渡し用にアップキャスト
    |> fun x -> doc.SaveAs2000(x) //保存

    doc.Close()
    app.Quit()
    0 // 整数の終了コードを返します

깨끗이!
이제 입력이 무엇인지 알기 쉬워졌습니다.

그리고 Qiita의 신택스 하이라이트에서는 나오지 않지만 Visual Studio의 경우 Mutable 변수가 노랗게되어 있기 때문에 어디에서 참조를 다시 쓸 수 있는지 알기 쉽습니다. 이 근처 F# 좋은 와….


참고

좋은 웹페이지 즐겨찾기