如何使用Excel Interop设置列宽?

时间:2017-09-19 01:09:28

标签: excel f# excel-interop

我成功地使用vagrant insecure key库写入Excel范围,设置字体颜色等。我无法做的一件事:设置列宽。找不到F#特定的文档,并调整我发现的C#似乎不起作用。例如,此代码无效:

Microsoft.Office.Interop.Excel

这行代码甚至无法编译:

worksheet.Columns.AutoFit()

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

首先,在ExcelProvider的帮助下,使用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()

在安装了Excel的包装盒上运行带有fsx的上述FSI脚本应该会产生类似下面的输出:

--> 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应用程序窗口,并观察第一列宽度是否真的发生了变化。

更新覆盖原始问题的Autofit部分:要识别的重要信息是,范围的单元格宽度和高度的拟合可以仅在之后完成范围已填满。将Autofit()应用于空范围是没有用的,而对于已经填充的范围,它可以按预期工作。

让我们使用不同长度的字符串填充示例工作表第1行的前4列,然后通过在显示Autofit值的行后面放置以下内容来应用newW

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