C#NPOI导出至Word

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

NPOI可以导出至Excel,那当然也可以导出至Word,DataTable的构造与Excel中的一样,DataTable写入word的操作方法却不一样了。


一、操作步骤

1.写段落以及段落格式的封装

代码如下:

//写段落及格式
public XWPFParagraph SetParagraph(XWPFDocument document,ParagraphAlignment paragraphAlign,bool isBold,string fillContent,int fontSize,bool isItalic,string fontColor,string fontFamily,bool isDoubleStrike,bool isStrike,UnderlinePatterns underline,int textPosition,bool isImprinted,bool isItalic,VerticalAlign vertical)
{
	XWPFParagraph paragraph = document.CreateParagraph();//创建段落对象
    paragraph.Alignment = paragraphAlign;//文字显示位置,段落排列(左对齐,居中,右对齐)
    
    XWPFRun xwpfRun = paragraph.CreateRun();//创建段落文本对象
    xwpfRun.IsBold = isBold;//文字加粗
    xwpfRun.SetText(fillContent);
    xwpfRun.FontSize = fontSize;//设置文字大小
    xwpfRun.IsItalic = isItalic;//是否设置斜体(字体倾斜)
    xwpfRun.SetColor(fontColor);//设置字体颜色--十六进制
    xwpfRun.SetFontFamily(fontFamily, FontCharRange.None); //设置标题样式如:(微软雅黑,隶书,楷体)根据自己的需求而定
    xwpfRun.IsDoubleStrikeThrough = isDoubleStrike;//是否显示双删除线
    xwpfRun.IsStrikeThrough = isStrike;//是否显示单删除线
    xwpfRun.SetUnderline(underline);//设置下划线,枚举类型
    xwpfRun.SetTextPosition(20);//设置文本位置
    xwpfRun.AddBreak();//设置换行(</br>)
    xwpfRun.AddTab();//添加tab键
    xwpfRun.AddCarriageReturn();//添加回车键
    xwpfRun.IsImprinted = isImprinted;//印迹(悬浮阴影),效果和浮雕类似
    xwpfRun.IsItalic=isItalic;//是否设置斜体(字体倾斜)
    xwpfRun.Subscript = vertical;//设置下标,枚举类型
}

2.创建表格及表格设置

//创建一个document对象实例
 XWPFDocument document = new XWPFDocument();
 XWPFTable table = doc.CreateTable(1, 4);//创建table,1行4列
 table.RemoveRow(0);//去掉第一行空白的
 table.SetColumnWidth(0, 6 * 256);//设置列的宽度
 table.SetColumnWidth(1, 10 * 256);
 table.SetColumnWidth(2, 6 * 256);
 table.SetColumnWidth(3, 10 * 256);//但是我使用这个设置并不起效!!!!!!!!(不知道有没有大神能解释一下)
 CT_Tbl m_CTTbl = doc.Document.body.GetTblArray()[0];//获得文档第一张表
 m_CTTbl.AddNewTblPr().jc = new CT_Jc();
 m_CTTbl.AddNewTblPr().jc.val = ST_Jc.center;//表在页面水平居中

3.创建并加入行

代码如下:

//貌似要设置表格的行高的话,我只发现这种方法可以设置,
CT_Row nr = new CT_Row();
XWPFTableRow mr = new XWPFTableRow(nr, table);//创建行
mr.GetCTRow().AddNewTrPr().AddNewTrHeight().val = (ulong)1000;//设置行高
nr.AddNewTrPr().AddNewTrHeight().val = (ulong)1000;//设置行高(这两行都得有)
table.AddRow(mr);//将行添加到table中 
mr.CreateCell().SetText("培训班名称");
//mr.CreateCell().SetParagraph(SetTableParagraph(.....));这可以用我们自己封装的方法写,里面的参数由你封装的方法参数而定,可以更好的设置格式      
mr.GetCell(0).SetVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);//文字垂直居中(即上下居中)
XWPFTableCell c1 = mr.CreateCell();//创建单元格
CT_Tc ct = c1.GetCTTc();
CT_TcPr cp = ct.AddNewTcPr();
cp.gridSpan = new CT_DecimalNumber();
cp.gridSpan.val = "3"; //合并3列,是从上面创建的c1单元格对象开始的
cp.AddNewVAlign().val = ST_VerticalJc.center;
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
ct.GetPList()[0].AddNewR().AddNewT().Value = r["TrainName"].ToString();

CT_Row cr1 = new CT_Row();
XWPFTableRow tr1 = new XWPFTableRow(cr1, table);//创建行
tr1.GetCTRow().AddNewTrPr().AddNewTrHeight().val = (ulong)1000;
cr1.AddNewTrPr().AddNewTrHeight().val = (ulong)1000;//上面一行和这一行都得有
table.AddRow(tr1);//将行加入table
tr1.CreateCell().SetParagraph(SetTableParagraph(workdoc, table, "委托资料提交专业", ParagraphAlignment.CENTER, 24, false, 10));
tr1.GetCell(0).SetVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);//文字垂直居中(即上下居中)
tr1.CreateCell().SetParagraph(SetTableParagraph(workdoc, table, "暖通", ParagraphAlignment.CENTER, 24, false, 10));
tr1.GetCell(1).SetVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);//文字垂直居中(即上下居中)
tr1.CreateCell().SetParagraph(SetTableParagraph(workdoc, table, "委托资料接受专业", ParagraphAlignment.CENTER, 24, false, 10));
tr1.GetCell(2).SetVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);//文字垂直居中(即上下居中)
tr1.CreateCell().SetParagraph(SetTableParagraph(workdoc, table, "电力", ParagraphAlignment.CENTER, 24, true, 10));
tr1.GetCell(3).SetVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);//文字垂直居中(即上下居中)


总结

导出word类中的方法还有很多,在类中自己去寻找想用的方法即可,当然这个也与你使用的NPOI版本有关,对于在表格中段落换行我是通过添加新段落实现的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

强而又低调

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值