做项目时要用NPIO操作word中的表格,但是查了好多资料都没有一个完整的例子,最后我将好多资料进行整理,整理了一段本人认为相对完善的对表格的相关操作。包括,创建表格,设置表格宽度,表格居中、设置单元格宽度、单元格里面的文字居中等,现将这段代码写在这里希望能帮到各位。
XWPFDocument doc = new XWPFDocument();
XWPFParagraph paragraph = doc.CreateParagraph();
//生成文档标题
XWPFRun run = paragraph.CreateRun();
run.FontFamily = "宋体";
run.FontSize = 18;
run.SetBold(true);
run.SetText("word表格制作");
//创建表
XWPFTable table = doc.CreateTable(1, 6);//创建一个一行六列的表
CT_Tbl ctTbl = doc.Document.body.GetTblArray()[0];
//设置表水平居中
ctTbl.AddNewTblPr().jc = new CT_Jc();
ctTbl.AddNewTblPr().jc.val = ST_Jc.center;
//设置表宽度
ctTbl.AddNewTblPr().AddNewTblW().w = "8000";
ctTbl.AddNewTblPr().AddNewTblW().type = ST_TblWidth.dxa;
#region //列宽设置和单元格居中设置
CT_TcPr ctTcPr = table.GetRow(0).GetCell(0).GetCTTc().AddNewTcPr();
ctTcPr.tcW = new CT_TblWidth();
ctTcPr.tcW.w = "2800";//单元格宽
ctTcPr.tcW.type = ST_TblWidth.dxa;
CT_VerticalJc va = ctTcPr.AddNewVAlign();
va.val = ST_VerticalJc.center;//垂直居中
table.GetRow(0).GetCell(0).GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
ctTcPr = table.GetRow(0).GetCell(1).GetCTTc().AddNewTcPr();
ctTcPr.tcW = new CT_TblWidth();
ctTcPr.tcW.w = "1200";//单元格宽
ctTcPr.tcW.type = ST_TblWidth.dxa;
va = ctTcPr.AddNewVAlign();
va.val = ST_VerticalJc.center;//垂直居中
table.GetRow(0).GetCell(1).GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
ctTcPr = table.GetRow(0).GetCell(2).GetCTTc().AddNewTcPr();
ctTcPr.tcW = new CT_TblWidth();
ctTcPr.tcW.w = "1000";//单元格宽
ctTcPr.tcW.type = ST_TblWidth.dxa;
va = ctTcPr.AddNewVAlign();
va.val = ST_VerticalJc.center;//垂直居中
table.GetRow(0).GetCell(2).GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
ctTcPr = table.GetRow(0).GetCell(3).GetCTTc().AddNewTcPr();
ctTcPr.tcW = new CT_TblWidth();
ctTcPr.tcW.w = "1000";//单元格宽
ctTcPr.tcW.type = ST_TblWidth.dxa;
va = ctTcPr.AddNewVAlign();
va.val = ST_VerticalJc.center;//垂直居中
table.GetRow(0).GetCell(3).GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
ctTcPr = table.GetRow(0).GetCell(4).GetCTTc().AddNewTcPr();
ctTcPr.tcW = new CT_TblWidth();
ctTcPr.tcW.w = "1500";//单元格宽
ctTcPr.tcW.type = ST_TblWidth.dxa;
va = ctTcPr.AddNewVAlign();
va.val = ST_VerticalJc.center;//垂直居中
table.GetRow(0).GetCell(4).GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
ctTcPr = table.GetRow(0).GetCell(5).GetCTTc().AddNewTcPr();
ctTcPr.tcW = new CT_TblWidth();
ctTcPr.tcW.w = "2500";//单元格宽
ctTcPr.tcW.type = ST_TblWidth.dxa;
va = ctTcPr.AddNewVAlign();
va.val = ST_VerticalJc.center;//垂直居中
table.GetRow(0).GetCell(5).GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
#endregion
XWPFTableRow headRow = table.GetRow(0);
XWPFTableCell headCell = null;
headCell = headRow.GetCell(0);
headCell.SetText("项目");
headCell = headRow.GetCell(1);
headCell.SetText("人数");
headCell = headRow.GetCell(2);
headCell.SetText("男");
headCell = headRow.GetCell(3);
headCell.SetText("女");
headCell = headRow.GetCell(4);
headCell.SetText("人数2");
headCell = headRow.GetCell(5);
headCell.SetText("百分比");
int rowCount = 1;
//循环创建行,并插入数据
foreach (DataRow dr in dt.Rows)
{
XWPFTableRow row = null;
string checkPeo ="100%";
row = table.CreateRow();
table.GetRow(rowCount).GetCell(0).GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
table.GetRow(rowCount).GetCell(1).GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
table.GetRow(rowCount).GetCell(2).GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
table.GetRow(rowCount).GetCell(3).GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
table.GetRow(rowCount).GetCell(4).GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
table.GetRow(rowCount).GetCell(5).GetCTTc().GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
row.GetCell(0).SetText(dr[0].ToString());
row.GetCell(1).SetText(dr[1].ToString());
row.GetCell(2).SetText(dr[2].ToString());
row.GetCell(3).SetText(dr[3].ToString());
row.GetCell(4).SetText(dr[4].ToString());
row.GetCell(5).SetText(checkPeo);
rowCount++;
}