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 (人懒没办法)

posted @   不存在的马飞飞  阅读(3661)  评论(4编辑  收藏  举报
编辑推荐:
· 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代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示