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版本有关,对于在表格中段落换行我是通过添加新段落实现的。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个示例 C# Npoi 导出 Word 和 Excel 的 Helper 类: ```csharp using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using NPOI.XWPF.UserModel; using System.Collections.Generic; using System.IO; namespace MyProject.Helpers { public class NpoiHelper { /// <summary> /// 导出 Excel /// </summary> /// <param name="data">数据</param> /// <param name="filePath">文件路径</param> public static bool ExportExcel(List<List<string>> data, string filePath) { IWorkbook workbook; if (Path.GetExtension(filePath) == ".xls") { workbook = new HSSFWorkbook(); } else { workbook = new XSSFWorkbook(); } ISheet sheet = workbook.CreateSheet("Sheet1"); for (int i = 0; i < data.Count; i++) { IRow row = sheet.CreateRow(i); for (int j = 0; j < data[i].Count; j++) { ICell cell = row.CreateCell(j); cell.SetCellValue(data[i][j]); } } using (FileStream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { workbook.Write(stream); } return true; } /// <summary> /// 导出 Word /// </summary> /// <param name="data">数据</param> /// <param name="filePath">文件路径</param> public static bool ExportWord(List<string> data, string filePath) { XWPFDocument doc = new XWPFDocument(); XWPFParagraph p = doc.CreateParagraph(); foreach (string s in data) { XWPFRun r = p.CreateRun(); r.SetText(s); r.AddCarriageReturn(); } using (FileStream stream = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { doc.Write(stream); } return true; } } } ``` 使用示例: ```csharp // 导出 Excel List<List<string>> data = new List<List<string>>() { new List<string> { "姓名", "年龄", "性别" }, new List<string> { "张三", "18", "男" }, new List<string> { "李四", "20", "女" } }; NpoiHelper.ExportExcel(data, "D:\\test.xlsx"); // 导出 Word List<string> data = new List<string>() { "这是一段文本。", "这是另一段文本。" }; NpoiHelper.ExportWord(data, "D:\\test.docx"); ``` 注意,使用该 Helper 类需要安装 NPOI NuGet 包。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值