Excel Interop如何设置列宽?
我成功地使用Microsoft.Office.Interop.Excel
库写入Excel
范围,设置字体颜色等。 有一件事我无法做到:设置列宽。 无法findF#特定的文档,并调整我发现的C#似乎并没有工作。 例如,这个代码不起作用:
worksheet.Columns.AutoFit()
而这行代码甚至没有编译:
worksheet.Columns.[1].Columnwidth <- 15.0
有什么build议么?
首先,在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的框上运行FSI
上面的FSI
脚本应该产生类似于下面的输出:
- >引用'C:\ Program Files文件(x86)\ Microsoft Visual Studio 14.0 \ Visual Studio工具Office \ PIA \ Office15 \ Microsoft.Office.Interop.Excel.dll' 列1的当前宽度是8.430000 列1的新宽度是15.000000 按任何一个键退出
在停止脚本之前,您可能需要find打开的Excel应用程序窗口,并观察第一列的宽度是否真的发生了变化。
更新:覆盖原始问题的Autofit
部分:需要认识的重要一点是,范围的填充后才能进行范围单元格宽度和高度的拟合。 将Autofit()
应用到空白区域是没有用的,而对于已经填充的区域,它按预期工作。
让我们用不同长度的string填充示例工作表第1行的前4列,然后在显示newW
值的行newW
:
let rowContents = "Our widths are flexible".Split(' ') in (exOWs.Rows.[1] :?> Range).Resize(ColumnSize=rowContents.Length).Value2 <- rowContents exOWs.Columns.AutoFit() |> ignore
并观察视觉效果: