2017-09-19 17 views
1

Microsoft.Office.Interop.Excelライブラリを使用して、Excelの範囲に書き込み、フォントの色を設定するなどに成功しました。私ができなかったことの1つ:列の幅を設定すること。 F#固有のドキュメントを見つけられず、C#のために見つけたものを適応させることができないようです。Excel Interopで列幅を設定するにはどうすればよいですか?

worksheet.Columns.AutoFit() 

とのコード行もコンパイルされません:

worksheet.Columns.[1].Columnwidth <- 15.0 

任意の提案たとえば、このコードでは効果がありませんか?

答えて

2

まず、の助けを借りて、F#からExcelを操作する方が簡単です。

しかし、F#のCOMを扱う複雑さが分かっていれば、裸のExcelで動作するものはでもも複雑ではありません。

あなたがあなた自身の試みと間違っている正確に何を指摘するために十分な詳細を提供しなかったので、ここでは視覚的なデモを含むワークシートの列幅、と操作性を示す自己完結型の抜粋です:

#r "Microsoft.Office.Interop.Excel" 
open Microsoft.Office.Interop.Excel 
open System 
let ex = new ApplicationClass(Visible=true) 
let exO = ex.Workbooks.Add() 
let exOWs = exO.Worksheets.[1] :?> Worksheet 
exOWs.Name <- "TestSheet" 
let col1 = exOWs.Columns.[1] :?> Range 
let oldW = col1.ColumnWidth |> unbox 
printfn "Current width of column 1 is %f" oldW 
col1.ColumnWidth <- 15.0 
let newW = col1.ColumnWidth |> unbox 
printfn "New width of column 1 is %f" newW 
printfn "Press any key to exit" 
Console.ReadLine() |> ignore 
exO.Close(false, false, Type.Missing) 
ex.Quit() 

あなたがopeneを検索したい場合があり、スクリプトを停止する前に

 
--> Referenced 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Visual Studio Tools for Office\PIA\Office15\Microsoft.Office.Interop.Excel.dll' 

Current width of column 1 is 8.430000 
New width of column 1 is 15.000000 
Press any key to exit 

:Excelがインストールされた箱にFSIで上記fsxスクリプトを実行すると、以下のような出力を生成する必要がありますd Excelアプリケーションウィンドウで、最初の列幅が実際に変更されたことを確認します。

UPDATE:元の質問のAutofit一部を覆う:認識することが重要ちらほらしか範囲が満たされている後に行うことができる範囲のセルの幅と高さのフィッティングです。空の範囲にAutofit()を適用することは無用ですが、既に塗りつぶされた範囲に対しては期待通りに機能します。

のは、異なる長さの文字列で、当社のサンプルワークシートの行1の最初の4列を記入して、newW値を示す行の後に次のように配置することにより、Autofitを適用してみましょう:

let rowContents = "Our widths are flexible".Split(' ') in 
    (exOWs.Rows.[1] :?> Range).Resize(ColumnSize=rowContents.Length).Value2 <- rowContents 
exOWs.Columns.AutoFit() |> ignore 

をし、視覚効果を観察する: enter image description here

+0

多くのありがとうございます。私はExcelProviderを調べます。私はRangeに落ちなければならないことを知らなかった。自動的に列の幅を内容に合わせる方法はありますか?より一般的には、F#とInteropについてもっと学ぶことができる場所はありますか? – Soldalma

+1

@ソルダルマ私は、私の答えに列幅自動調整の図を追加しました。 'F#and Interop in general'に関しては、私にとっては、[.NETライブラリとのシームレスな相互運用](https://fsharpforfunandprofit.com/posts/completeness-seamless-dotnet-interop/)のような興味深い面に集中しています。 F#で行われた低レベルのExcelオートメーション配管よりも。私がVBやC#をF#の代わりに使用すると、インターフェイスのメソッドを呼び出す、静的な型にキャストするなど、特定のF#仕様を説明するだけではあまり違いはありません。 –

+0

もう一度ありがとうございます。私はF#で多くの記事を読みましたが、これは気づいていませんでした。ところで、私はあなたの本を読んで(そして買った)。よくやった! – Soldalma

関連する問題