C#使用NPOI库生成Word文档时如何将两个表格放在同一行
NPOI 实现Word双表格同行展示方案
Word默认将表格识别为块级元素,独占一行排版,要实现两个表格并排展示,可选用以下两种成熟方案:
- 方案1:创建1行2列的无框外层表格作为容器,将两个需要并排的表格分别嵌入外层表格的两个单元格中,视觉上无容器痕迹,兼容性最好,不会因Word版本差异出现排版错乱。
- 方案2:给第一个表格设置文字环绕属性为「环绕」,调整表格右侧边距后插入第二个表格,实现并排效果。
方案1代码示例(推荐)
XWPFDocument doc = new XWPFDocument(); // 创建1行2列的外层容器表格 XWPFTable outerTable = doc.CreateTable(1, 2); // 隐藏外层表格所有边框,实现视觉透明 int borderWidth = 0; foreach (var row in outerTable.Rows) { foreach (var cell in row.GetTableCells()) { cell.SetBorderLeft(borderWidth); cell.SetBorderRight(borderWidth); cell.SetBorderTop(borderWidth); cell.SetBorderBottom(borderWidth); // 可按需调整单元格宽度,控制两个子表格的间距 cell.SetWidth("3000"); } } // 第一个单元格插入表格1 var cell1 = outerTable.GetRow(0).GetCell(0); XWPFTable table1 = cell1.InsertNewTable(0, 1, 1); table1.GetRow(0).GetCell(0).SetText("TABLE1"); // 第二个单元格插入表格2 var cell2 = outerTable.GetRow(0).GetCell(1); XWPFTable table2 = cell2.InsertNewTable(0, 1, 1); table2.GetRow(0).GetCell(0).SetText("TABLE2"); // 保存文档 using (FileStream fs = new FileStream("output.docx", FileMode.Create, FileAccess.Write)) { doc.Write(fs); }
方案2代码示例
XWPFDocument doc = new XWPFDocument(); XWPFTable table1 = doc.CreateTable(1, 1); table1.GetRow(0).GetCell(0).SetText("TABLE1"); // 设置第一个表格文字环绕属性 var table1Props = table1.GetCTTbl().AddNewTblPr(); var wrap = table1Props.AddNewTblpPr(); wrap.AddNewTblpW().val = ST_TblWidth.dxa; wrap.AddNewTblpW().w = 100; // 表格右侧预留100单位间距,可按需调整 wrap.AddNewTblOverlap().val = ST_TblOverlap.never; wrap.AddNewJc().val = ST_Jc.left; // 插入第二个表格 XWPFTable table2 = doc.CreateTable(1, 1); table2.GetRow(0).GetCell(0).SetText("TABLE2"); // 保存文档 using (FileStream fs = new FileStream("output.docx", FileMode.Create, FileAccess.Write)) { doc.Write(fs); }
内容的提问来源于stack exchange,提问作者Jacek Kowalski
相关产品推荐
相关产品推荐

