C#NPOI設置WORD中表格TABLE的固定列寬


NPOI關於 WORD 中 TABLE 的列寬設置

table is XWPFTable

設置表格的tblLayout 

table.GetCTTbl().AddNewTblPr().tblLayout = new CT_TblLayoutType() { type = ST_TblLayoutType.@fixed };

tblLayout 這個屬性 默認值是 autofit 這里需要設置為 fixed 將自動改為固定寬

如果說你使用的NPOI 版本過低沒有 GetCTTbl 這個方法的話 那么可以使用反射將 ctTbl 拿出

var tableType = table.GetType();
FieldInfo fieldInfo = tableType.GetField("ctTbl", BindingFlags.NonPublic | BindingFlags.Instance);

設置每列的寬度!

如果你的Tabel是在生成時就指定了列和行 那么可以直接使用方法

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

        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來調整寬度

            <w:tblGrid>
              <w:gridCol w:w="980" />
              <w:gridCol w:w="980" />
              <w:gridCol w:w="980" />
            </w:tblGrid>

所以在使用 AddNewCol 時還需要對grid進行添加 AddNewGridCol 添加完對應的grid之后再使用 SetColumnWidth

table.GetCTTbl().tblGrid.AddNewGridCol(); 
//當然你也可以在 AddNewGridCol 就對寬度進行設置 但是使用這種方式時 會出現空指針異常 需要增加對 tblGrid == null 的判斷
table.GetCTTbl().tblGrid.gridCol.Add(new CT_TblGridCol (){ w=980 });

  

這里由於其他關系並沒有相關 DEMO (人懶沒辦法)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM