まず、の助けを借りて、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
をし、視覚効果を観察する:
多くのありがとうございます。私はExcelProviderを調べます。私はRangeに落ちなければならないことを知らなかった。自動的に列の幅を内容に合わせる方法はありますか?より一般的には、F#とInteropについてもっと学ぶことができる場所はありますか? – Soldalma
@ソルダルマ私は、私の答えに列幅自動調整の図を追加しました。 'F#and Interop in general'に関しては、私にとっては、[.NETライブラリとのシームレスな相互運用](https://fsharpforfunandprofit.com/posts/completeness-seamless-dotnet-interop/)のような興味深い面に集中しています。 F#で行われた低レベルのExcelオートメーション配管よりも。私がVBやC#をF#の代わりに使用すると、インターフェイスのメソッドを呼び出す、静的な型にキャストするなど、特定のF#仕様を説明するだけではあまり違いはありません。 –
もう一度ありがとうございます。私はF#で多くの記事を読みましたが、これは気づいていませんでした。ところで、私はあなたの本を読んで(そして買った)。よくやった! – Soldalma