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 

并观察视觉效果: 在这里输入图像说明