C#NPOI设置WORD中表格TABLE的固定列宽
NPOI关于 WORD 中 TABLE 的列宽设置
table is XWPFTable
设置表格的tblLayout
1 | table.GetCTTbl().AddNewTblPr().tblLayout = new CT_TblLayoutType() { type = ST_TblLayoutType.@ fixed }; |
tblLayout 这个属性 默认值是 autofit 这里需要设置为 fixed 将自动改为固定宽
如果说你使用的NPOI 版本过低没有 GetCTTbl 这个方法的话 那么可以使用反射将 ctTbl 拿出
1 2 | var tableType = table.GetType(); FieldInfo fieldInfo = tableType.GetField( "ctTbl" , BindingFlags.NonPublic | BindingFlags.Instance); |
设置每列的宽度!
如果你的Tabel是在生成时就指定了列和行 那么可以直接使用方法
1 2 3 4 5 | var row = table.Rows[0]; var cells = row.GetTableCells(); for ( int i = 0; i < cells.Count; i++) { table.SetColumnWidth(i,980); } |
SetColumnWidth 设置每列的宽度 i 指的是对应的列 从0开始 980?指的是宽度 这里的单位是 twip 在 1920*1080 分辨率下 8522twip 宽度刚好一页
如果说你的Table并不是在生成时指定的大小 而是使用 AddNewCol 这个方法进行对列大小的调整 那么 SetColumnWidth 对这种ADD生成的并没有支持
SetColumnWidth 源代码 NPOI.XWPF.UserModel.XWPFTable
1 2 3 4 5 6 7 8 9 10 11 | public void SetColumnWidth( int columnIndex, ulong width) { if ( this .ctTbl.tblGrid == null ) return ; if (columnIndex > this .ctTbl.tblGrid.gridCol.Count) { throw new ArgumentOutOfRangeException( string .Format( "Column index {0} doesn't exist." , columnIndex)); } this .ctTbl.tblGrid.gridCol[columnIndex].w = width; } |
这里并不难看出 宽度其实和列的设置无关 而是来自于 grid 这元素 Word XML代码 可以通过这里的w:w来调整宽度
1 2 3 4 5 | <w:tblGrid> <w:gridCol w:w= "980" /> <w:gridCol w:w= "980" /> <w:gridCol w:w= "980" /> </w:tblGrid> |
所以在使用 AddNewCol 时还需要对grid进行添加 AddNewGridCol 添加完对应的grid之后再使用 SetColumnWidth
1 | table.GetCTTbl().tblGrid.AddNewGridCol(); |
1 | //当然你也可以在 AddNewGridCol 就对宽度进行设置 但是使用这种方式时 会出现空指针异常 需要增加对 tblGrid == null 的判断 |
1 | table.GetCTTbl().tblGrid.gridCol.Add( new CT_TblGridCol (){ w=980 }); |
这里由于其他关系并没有相关 DEMO (人懒没办法)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!