首先导入Nuget包NPOI;
1.使用NPOI生成Word
2.读取word模板填充数据
ps:第一次写,请见谅
1.使用NPOI生成word
//里面使用的方法都在下面
public bool GenerateWord()
try
{
string currentDate = DateTime.Now.ToString("yyyyMMdd");
string checkTime = DateTime.Now.ToString("yymmddss");//检查时间
var uploadPath = @"D:\MyCode\Words\Files\";
string workFileName = checkTime + "Test";
string fileName = string.Format("{0}.docx", workFileName, System.Text.Encoding.UTF8);
if (!Directory.Exists(uploadPath))
{
Directory.CreateDirectory(uploadPath);
}
//TODO:使用FileStream文件流来写入数据(传入参数为:文件所在路径,对文件的操作方式,对文件内数据的操作)
//通过使用文件流,创建文件流对象,向文件流中写入内容,并保存为Word文档格式
using (var stream = new FileStream(Path.Combine(uploadPath, fileName), FileMode.Create, FileAccess.Write))
{
//创建document文档对象对象实例
XWPFDocument document = new XWPFDocument();
#region 页脚
document.Document.body.sectPr = new CT_SectPr();
var with = document.Document.body.sectPr.pgSz.w;
//设置为纵向
document.Document.body.sectPr.pgSz.w = document.Document.body.sectPr.pgSz.h;
document.Document.body.sectPr.pgSz.h = with;
//页面边距
document.Document.body.sectPr.pgMar.left = 800;//左边距
document.Document.body.sectPr.pgMar.right = 800;//右边距
document.Document.body.sectPr.pgMar.top = "850";//上边距
document.Document.body.sectPr.pgMar.bottom = "850";//下边距
CT_SectPr m_SectPr = document.Document.body.sectPr;
//创建页脚
CT_Ftr m_ftr = new CT_Ftr();
m_ftr.AddNewP().AddNewR().AddNewT().Value = "Wuxi XDC ADC Contract Proposal";
//创建页脚关系(footern.xml)
XWPFRelation Frelation = XWPFRelation.FOOTER;
XWPFFooter m_f = (XWPFFooter)document.CreateRelationship(Frelation, XWPFFactory.GetInstance(), document.FooterList.Count + 1);
//设置页脚
m_f.SetHeaderFooter(m_ftr);
m_f.SetXWPFDocument(document);
CT_HdrFtrRef m_HdrFtr1 = m_SectPr.AddNewFooterReference();
m_HdrFtr1.type = ST_HdrFtr.@default;
m_HdrFtr1.id = m_f.GetPackageRelationship().Id;
#endregion
/**
*这里我通过设置公共的Word文档中SetParagraph(段落)实例创建和段落样式格式设置,大大减少了代码的冗余,
* 避免每使用一个段落而去创建一次段落实例和设置段落的基本样式
*(如下,ParagraphInstanceSetting为段落实例创建和样式设置,后面索引表示为当前是第几行段落,索引从0开始)
*/
#region 头部
int pos = 1;
//图片标题
document.SetParagraph(ParagraphInsertImg(document), 0);
//文本标题
document.SetParagraph(ParagraphInstanceSetting(document, "", true, 18, "宋体", ParagraphAlignment.CENTER), pos++);
//文本标题
document.SetParagraph(ParagraphInstanceSetting(document, "", true, 18, "宋体", ParagraphAlignment.CENTER), pos++);
//文本标题《项目编号》
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 18, "宋体", ParagraphAlignment.CENTER), pos++);
//创建文档中的表格对象实例
XWPFTable firstXwpfTable = document.CreateTable(8, 3);//显示的行列数rows:8行,cols:3列
firstXwpfTable.Width = 6000;//总宽度
firstXwpfTable.SetColumnWidth(0, 2000); /* 设置列宽 */
firstXwpfTable.SetColumnWidth(1, 2000); /* 设置列宽 */
firstXwpfTable.SetColumnWidth(2, 2000); /* 设置列宽 */
firstXwpfTable.SetTopBorder(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
firstXwpfTable.SetBottomBorder(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
firstXwpfTable.SetLeftBorder(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
firstXwpfTable.SetRightBorder(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
firstXwpfTable.SetInsideHBorder(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
firstXwpfTable.SetInsideVBorder(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
firstXwpfTable.SetCellMargins(0, 100, 0, 0);
//Table 表格第一行展示...后面的都是一样,只改变GetRow中的行数
firstXwpfTable.GetRow(0).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, " ", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(0).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, "委托方:", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(0).GetCell(2).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, $"{"苏州光明生物制药有限公司"}", ParagraphAlignment.LEFT, 24, false));
//Table 表格第一行展示...后面的都是一样,只改变GetRow中的行数
firstXwpfTable.GetRow(1).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, " ", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(1).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, ":", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(1).GetCell(2).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, $"", ParagraphAlignment.LEFT, 24, false));
//Table 表格第一行展示...后面的都是一样,只改变GetRow中的行数
firstXwpfTable.GetRow(2).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, " ", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(2).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, ":", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(2).GetCell(2).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, $"", ParagraphAlignment.LEFT, 24, false));
//Table 表格第一行展示...后面的都是一样,只改变GetRow中的行数
firstXwpfTable.GetRow(3).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, " ", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(3).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, ":", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(3).GetCell(2).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, $"{""}", ParagraphAlignment.LEFT, 24, false));
//Table 表格第一行展示...后面的都是一样,只改变GetRow中的行数
firstXwpfTable.GetRow(4).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, " ", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(4).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, ":", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(4).GetCell(2).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, $"", ParagraphAlignment.LEFT, 24, false));
//Table 表格第一行展示...后面的都是一样,只改变GetRow中的行数
firstXwpfTable.GetRow(5).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, " ", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(5).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, ":", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(5).GetCell(2).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, $"", ParagraphAlignment.LEFT, 24, false));
//Table 表格第一行展示...后面的都是一样,只改变GetRow中的行数
firstXwpfTable.GetRow(6).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, " ", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(6).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, ":", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(6).GetCell(2).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, $"", ParagraphAlignment.LEFT, 24, false));
//Table 表格第一行展示...后面的都是一样,只改变GetRow中的行数
firstXwpfTable.GetRow(7).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, " ", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(7).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, ":", ParagraphAlignment.RIGHT, 24, true, 10));
firstXwpfTable.GetRow(7).GetCell(2).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, $"", ParagraphAlignment.LEFT, 24, false));
#endregion
#region 内容
//文本
document.SetParagraph(ParagraphInstanceSetting(document, "xxxx.", false, 10, "宋体", ParagraphAlignment.LEFT), pos++);
//下划线标题
document.SetParagraph(ParagraphInstanceSetting(document, $"xxx", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, true), pos++);
//文本
document.SetParagraph(ParagraphInstanceSetting(document, "xxxx", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
//文本
document.SetParagraph(ParagraphInstanceSetting(document, @"xx", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
//下划线标题
document.SetParagraph(ParagraphInstanceSetting(document, $"xx", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, true), pos++);
//文本
document.SetParagraph(ParagraphInstanceSetting(document, @"xxx。", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
//下划线标题
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " ", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, "", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • ", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • ", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • ", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • ", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • (包括液体和冻干制剂)", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
//下划线标题
document.SetParagraph(ParagraphInstanceSetting(document, $",", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, @"", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"表格1", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
#endregion
#region 文档第一个表格对象实例
//创建文档中的表格对象实例
XWPFTable firstXwpfTable1 = document.CreateTable(2, 3);//显示的行列数rows:3行,cols:4列
firstXwpfTable1.Width = 3000;//总宽度
firstXwpfTable1.SetColumnWidth(0, 1000); /* 设置列宽 */
firstXwpfTable1.SetColumnWidth(1, 1000); /* 设置列宽 */
//Table 表格第一行展示...后面的都是一样,只改变GetRow中的行数
firstXwpfTable1.GetRow(0).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable1, " ", ParagraphAlignment.CENTER, 24, true));
firstXwpfTable1.GetRow(0).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable1, "xxxx", ParagraphAlignment.CENTER, 24, false));
firstXwpfTable1.GetRow(0).GetCell(2).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable1, "xx", ParagraphAlignment.CENTER, 24, true));
//Table 表格第二行
firstXwpfTable1.GetRow(1).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable1, "xx", ParagraphAlignment.CENTER, 24, true));
firstXwpfTable1.GetRow(1).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable1, "xx", ParagraphAlignment.CENTER, 24, false));
firstXwpfTable1.GetRow(1).GetCell(2).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable1, "xx", ParagraphAlignment.CENTER, 24, true));
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"xx", false, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • xxx", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • x", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • xx ", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • xxx", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • xxx", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • x", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • xx", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • x", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"x", false, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"x", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, true), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $" x", false, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • x", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " • x", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, " ••••••", false, 12, "宋体", ParagraphAlignment.LEFT), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"x", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
document.SetParagraph(ParagraphInstanceSetting(document, $"", true, 12, "宋体", ParagraphAlignment.LEFT, false, "", "000000", false, false), pos++);
//创建文档中的表格对象实例
XWPFTable firstXwpfTable2 = document.CreateTable(4, 3);//显示的行列数rows:3行,cols:4列
firstXwpfTable2.Width = 3000;//总宽度
firstXwpfTable2.SetColumnWidth(0, 1000); /* 设置列宽 */
firstXwpfTable2.SetColumnWidth(1, 1000); /* 设置列宽 */
firstXwpfTable2.SetColumnWidth(2, 1000); /* 设置列宽 */
#endregion
var checkPeopleNum = 0;//检查人数
var totalScore = 0;//总得分
#region 文档第二个表格对象实例(遍历表格项)
//创建文档中的表格对象实例
XWPFTable secoedXwpfTable = document.CreateTable(5, 4);//显示的行列数rows:8行,cols:4列
secoedXwpfTable.Width = 5200;//总宽度
secoedXwpfTable.SetColumnWidth(0, 1300); /* 设置列宽 */
secoedXwpfTable.SetColumnWidth(1, 1100); /* 设置列宽 */
secoedXwpfTable.SetColumnWidth(2, 1400); /* 设置列宽 */
secoedXwpfTable.SetColumnWidth(3, 1400); /* 设置列宽 */
//遍历表格标题
secoedXwpfTable.GetRow(0).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, "员工姓名", ParagraphAlignment.CENTER, 24, true));
secoedXwpfTable.GetRow(0).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, "性别", ParagraphAlignment.CENTER, 24, true));
secoedXwpfTable.GetRow(0).GetCell(2).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, "年龄", ParagraphAlignment.CENTER, 24, true));
secoedXwpfTable.GetRow(0).GetCell(3).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, "综合评分", ParagraphAlignment.CENTER, 24, true));
//遍历四条数据
for (var i = 1; i < 5; i++)
{
secoedXwpfTable.GetRow(i).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, "小明" + i + "号", ParagraphAlignment.CENTER, 24, false));
secoedXwpfTable.GetRow(i).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, "男", ParagraphAlignment.CENTER, 24, false));
secoedXwpfTable.GetRow(i).GetCell(2).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, 20 + i + "岁", ParagraphAlignment.CENTER, 24, false));
secoedXwpfTable.GetRow(i).GetCell(3).SetParagraph(SetTableParagraphInstanceSetting(document, firstXwpfTable, 90 + i + "分", ParagraphAlignment.CENTER, 24, false));
checkPeopleNum++;
totalScore += 90 + i;
}
#endregion
#region 文档第三个表格对象实例
//创建文档中的表格对象实例
XWPFTable thirdXwpfTable = document.CreateTable(5, 4);//显示的行列数rows:5行,cols:4列
thirdXwpfTable.Width = 5200;//总宽度
thirdXwpfTable.SetColumnWidth(0, 1300); /* 设置列宽 */
thirdXwpfTable.SetColumnWidth(1, 1100); /* 设置列宽 */
thirdXwpfTable.SetColumnWidth(2, 1400); /* 设置列宽 */
thirdXwpfTable.SetColumnWidth(3, 1400); /* 设置列宽 */
//Table 表格第一行,后面的合并3列(注意关于表格中行合并问题,先合并,后填充内容)
thirdXwpfTable.GetRow(0).MergeCells(0, 3);//从第一列起,合并3列
thirdXwpfTable.GetRow(0).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, thirdXwpfTable, " " + "检查内容: " +
$"于{checkTime}下午检查了企业员工培训考核并对员工的相关信息进行了相关统计,统计结果如下: " +
"-------------------------------------------------------------------------------------" +
$"共对该企业({checkPeopleNum})人进行了培训考核,培训考核总得分为({totalScore})分。 " + "", ParagraphAlignment.LEFT, 30, false));
//Table 表格第二行
thirdXwpfTable.GetRow(1).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, thirdXwpfTable, "检查结果: ", ParagraphAlignment.CENTER, 24, true));
thirdXwpfTable.GetRow(1).MergeCells(1, 3);//从第二列起,合并三列
thirdXwpfTable.GetRow(1).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, thirdXwpfTable, "该企业非常优秀,坚持每天学习打卡,具有蓬勃向上的活力。", ParagraphAlignment.LEFT, 24, false));
//Table 表格第三行
thirdXwpfTable.GetRow(2).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, thirdXwpfTable, "处理结果: ", ParagraphAlignment.CENTER, 24, true));
thirdXwpfTable.GetRow(2).MergeCells(1, 3);
thirdXwpfTable.GetRow(2).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, thirdXwpfTable, "通过检查,评分为优秀!", ParagraphAlignment.LEFT, 24, false));
//Table 表格第四行,后面的合并3列(注意关于表格中行合并问题,先合并,后填充内容),额外说明
thirdXwpfTable.GetRow(3).MergeCells(0, 3);//合并3列
thirdXwpfTable.GetRow(3).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, thirdXwpfTable, "备注说明: 记住,坚持就是胜利,永远保持一种求知,好问的心理!", ParagraphAlignment.LEFT, 24, false));
//Table 表格第五行
thirdXwpfTable.GetRow(4).MergeCells(0, 1);
thirdXwpfTable.GetRow(4).GetCell(0).SetParagraph(SetTableParagraphInstanceSetting(document, thirdXwpfTable, " 检查人员签名: 年 月 日", ParagraphAlignment.LEFT, 30, false));
thirdXwpfTable.GetRow(4).MergeCells(1, 2);
thirdXwpfTable.GetRow(4).GetCell(1).SetParagraph(SetTableParagraphInstanceSetting(document, thirdXwpfTable, " 企业法人签名: 年 月 日", ParagraphAlignment.LEFT, 30, false));
//创建表格
var col = 5;
XWPFTable table = document.CreateTable(1, 5);//思路,数据一行一行画
table.RemoveRow(0);//去掉第一行空白的
table.Width = 1000 * 5;
table.SetColumnWidth(0, 1000);/* 设置列宽 */
table.SetColumnWidth(1, 1000);
for (int i = 0; i < col - 3; i++)
{
table.SetColumnWidth(2 + i, 1000);/* 设置列宽 */
}
CT_Row nr = new CT_Row();
XWPFTableRow mr = new XWPFTableRow(nr, table);//创建行
table.AddRow(mr);//将行添加到table中
XWPFTableCell c1 = mr.CreateCell();//创建单元格
CT_Tc ct = c1.GetCTTc();
CT_TcPr cp = ct.AddNewTcPr();
//第1行
cp.AddNewVMerge().val = ST_Merge.restart;//合并行
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = "序号";
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
cp.AddNewVMerge().val = ST_Merge.restart;//合并行
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = "指标名称";
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
cp.gridSpan = new CT_DecimalNumber();
cp.gridSpan.val = Convert.ToString(col - 3); //合并列
cp.AddNewVAlign().val = ST_VerticalJc.center;
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
ct.GetPList()[0].AddNewR().AddNewT().Value = "年龄段";
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
cp.AddNewVMerge().val = ST_Merge.restart;//合并行
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = "合计";
//=====第一行表头结束=========
//2行,多行合并类似
nr = new CT_Row();
mr = new XWPFTableRow(nr, table);
table.AddRow(mr);
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
cp.AddNewVMerge().val = ST_Merge.@continue;//合并行 序号
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
cp.AddNewVMerge().val = ST_Merge.@continue;//合并行 指标名称
//年龄段分组
//["20岁以下","21-30","31-40","41-50","51-60","70岁以上"]
var alAge = new List<string>() { "20岁以下", "21-30", "31-40", "41-50", "51-60", "70岁以上" };//年龄段数组
for (int i = 0; i < alAge.Count; i++)
{
mr.CreateCell().SetText(Convert.ToString(alAge[i]));//年龄段单元格
}
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
cp.AddNewVMerge().val = ST_Merge.@continue;//合并行 合计
#endregion
//向文档流中写入内容,生成word
document.Write(stream);
savePath = "/SaveWordFile/" + currentDate + "/" + fileName;
return true;
}
}
catch (Exception ex)
{
//ignore
savePath = ex.Message;
return false;
}
}
2.使用word模板填充数据
/// <summary>
/// 读取word文档,并保存文件
/// </summary>
/// <param name="savePath"></param>
/// <returns></returns>
public bool ReadWordFileAndSave<T>(out string savePath, T models)
{
savePath = "";
//try
//{
string currentDate = DateTime.Now.ToString("yyyyMMdd");
string checkTime = DateTime.Now.ToString("yymmddss");//检查时间
var uploadPath = @"D:\MyCode\Aspose.Words\Files\";
var readPath = @"D:\MyCode\Aspose.Words\Files\Test.docx";
string workFileName = checkTime + "Test";
string fileName = string.Format("{0}.docx", workFileName, System.Text.Encoding.UTF8);
NPOIHellper NpoiWordParagraphTextStyleHelper = new NPOIHellper();
if (!Directory.Exists(uploadPath))
{
Directory.CreateDirectory(uploadPath);
}
using (var stream = new FileStream(Path.Combine(uploadPath, fileName), FileMode.Create, FileAccess.Write))
{
FileStream fileStream = new FileStream(readPath, FileMode.Open, FileAccess.Read);
//读取document文档对象对象实例
XWPFDocument document = new XWPFDocument(fileStream);
//写入document文档对象对象实例
XWPFDocument newDocument = new XWPFDocument();
newDocument = document;
var counts = new ArrayList();
foreach (var para in document.Paragraphs)
{
counts.Add(newDocument.GetPosOfParagraph(para));
}
foreach (var para in document.Tables)
{
counts.Add(newDocument.GetPosOfTable(para));
}
foreach (var c in counts)
{
newDocument.RemoveBodyElement((int)c);
}
var i = 0;
var ii = 0;
//遍历段落,替换内容
foreach (var para in document.Paragraphs)
{
Type entityType = typeof(T);
PropertyInfo[] properties = entityType.GetProperties();
string paratext = para.ParagraphText;
string text = paratext;
if (!string.IsNullOrWhiteSpace(paratext))
{
foreach (var p in properties)
{
string propteryName = p.Name;//Word模板中设定的需要替换的标签
object value = p.GetValue(models);
if (value == null)
{
value = "";
}
if (text.Contains(propteryName))
{
text = text.Replace(propteryName, value.ToString());
}
}
}
if (paratext != text)
{
XWPFRun xwpfRunCopy = para.Runs[0];
for (var i1 = para.Runs.Count - 1; i1 >= 0; i1--)
{
para.RemoveRun(i1);
}
XWPFRun xwpfRun = para.CreateRun();//创建段落文本对象
xwpfRun = xwpfRunCopy;
xwpfRun.SetText(text);//填充内容
}
var newpara = para;
newDocument.SetParagraph(newpara, i);
i += 1;
}
//遍历table,替换单元格内容
foreach (var table in document.Tables)
{
foreach (var row in table.Rows)
{
foreach (var cell in row.GetTableCells())
{
foreach (var para in cell.Paragraphs)
{
Type entityType = typeof(T);
PropertyInfo[] properties = entityType.GetProperties();
string paratext = para.ParagraphText;
string text = paratext;
if (!string.IsNullOrWhiteSpace(paratext))
{
foreach (var p in properties)
{
string propteryName = p.Name;//Word模板中设定的需要替换的标签
object value = p.GetValue(models);
if (value == null)
{
value = "";
}
if (text.Contains(propteryName))
{
text = text.Replace(propteryName, value.ToString());
}
}
}
if (paratext != text)
{
XWPFRun xwpfRunCopy = para.Runs[0];
for (var i1 = para.Runs.Count - 1; i1 >= 0; i1--)
{
para.RemoveRun(i1);
}
XWPFRun xwpfRun = para.CreateRun();//创建段落文本对象
xwpfRun = xwpfRunCopy;
xwpfRun.SetText(text);//填充内容
}
}
}
}
newDocument.SetTable(ii, table);
ii += 1;
}
//向文档流中写入内容,生成word
newDocument.Write(stream);
savePath = "/SaveWordFile/" + currentDate + "/" + fileName;
}
return true;
//}
//catch (Exception ex)
//{
// throw new Exception(ex.Message);
//}
}
/// <summary>
/// 读取word文档,并保存文件---当前使用
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="readPath">模板文件路径,绝对路径</param>
/// <param name="uploadPath">保存文件路径,绝对路径</param>
/// <param name="models"></param>
/// <param name="list"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public MemoryStream ReadWordFileAndSaves<T>(MemoryStream templateStream, T models, List<ActivityViewModel> list)
{
//读取document文档对象对象实例
XWPFDocument document = new XWPFDocument(templateStream);
var tablelist = new List<XWPFTable>();
var tablelist2 = new List<XWPFTable>();
list = list.OrderBy(c => c.ActivityType).ToList();
var activityType = string.Empty;
if (list.Count > 0 && list[0] != null && !string.IsNullOrWhiteSpace(list[0].ActivityType))
{
activityType = list[0].ActivityType;
}
var no = string.Empty;
if (list.Count > 1 && list[0] != null)
{
no = "1";
}
//遍历段落,替换内容
foreach (var para in document.Paragraphs)
{
if (para.ParagraphText.Contains("$ActivityDetalTableList$"))
{
para.ReplaceText("$ActivityDetalTableList$", activityType + ":");
para.Alignment = ParagraphAlignment.CENTER;
}
else
ReplaceKey(models, para, list);
}
//遍历table,替换单元格内容
foreach (var table in document.Tables)
{
foreach (var row in table.Rows)
{
foreach (var cell in row.GetTableCells())
{
foreach (var para in cell.Paragraphs)
{
if (para.ParagraphText.Contains("$ActivityType$"))
{
para.ReplaceText("$ActivityType$", activityType);
tablelist.Add(table);
}
else if (para.ParagraphText.Contains("$ActivityDetalTableListNo$"))
{
para.ReplaceText("$ActivityDetalTableListNo$", no);
tablelist2.Add(table);
}
else
ReplaceKey(models, para, list);
}
}
}
}
for (var i = 0; i < tablelist.Count; i++)
{
if (!list.Any())
{
break;
}
ReplaceKeyS(list, tablelist[i]);
tablelist[i].SetTopBorder(XWPFTable.XWPFBorderType.SINGLE, 1, 1, "000000");
tablelist[i].SetBottomBorder(XWPFTable.XWPFBorderType.SINGLE, 1, 1, "000000");
tablelist[i].SetLeftBorder(XWPFTable.XWPFBorderType.SINGLE, 1, 1, "000000");
tablelist[i].SetRightBorder(XWPFTable.XWPFBorderType.SINGLE, 1, 1, "000000");
tablelist[i].SetInsideHBorder(XWPFTable.XWPFBorderType.SINGLE, 1, 1, "000000");
tablelist[i].SetInsideVBorder(XWPFTable.XWPFBorderType.SINGLE, 1, 1, "000000");
}
for (var i = 0; i < tablelist2.Count; i++)
{
if (!list.Any())
{
break;
}
ReplaceTable(list, tablelist2[i]);
tablelist2[i].SetTopBorder(XWPFTable.XWPFBorderType.SINGLE, 1, 1, "000000");
//tablelist2[i].SetBottomBorder(XWPFTable.XWPFBorderType.SINGLE, 1, 1, "000000");
tablelist2[i].SetLeftBorder(XWPFTable.XWPFBorderType.SINGLE, 1, 1, "000000");
tablelist2[i].SetRightBorder(XWPFTable.XWPFBorderType.SINGLE, 1, 1, "000000");
tablelist2[i].SetInsideHBorder(XWPFTable.XWPFBorderType.SINGLE, 1, 1, "000000");
tablelist2[i].SetInsideVBorder(XWPFTable.XWPFBorderType.SINGLE, 1, 1, "000000");
}
//向文档流中写入内容,生成word
// 将创建好的文档对象写入流
//templateStream.Flush();
var resultStream = new MemoryStream();
document.Write(resultStream);
return resultStream;
}
/// <summary>
/// word模板内容替换
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="etity">实体数据</param>
/// <param name="para">段落</param>
private static void ReplaceKey<T>(T etity, XWPFParagraph para, List<ActivityViewModel> list)
{
Type entityType = typeof(T);
PropertyInfo[] properties = entityType.GetProperties();
string paratext = para.ParagraphText;
if (string.IsNullOrWhiteSpace(paratext))
{
return;
}
if (paratext.Contains("$ActivityList$"))
{
if (!list.Any())
{
para.ReplaceText("$ActivityList$", "暂无报价");
}
else
{
var first = true;
var copyrun = para.Runs[0];
var type = "FirstSpaceType";
foreach (var ActivityViewModel in list)
{
if (first)
{
para.ReplaceText("$ActivityList$", " • " + ActivityViewModel.ActivityName);
first = false;
type = ActivityViewModel.ActivityType;
}
else
{
XWPFRun xwpfRun = para.CreateRun();//创建段落文本对象
if (type != "FirstSpaceType" && type != ActivityViewModel.ActivityType)
{
xwpfRun.AddCarriageReturn();
}
type = ActivityViewModel.ActivityType;
xwpfRun.AddCarriageReturn();
xwpfRun.IsBold = copyrun.IsBold;//文字加粗
xwpfRun.FontSize = copyrun.FontSize;//设置文字大小
xwpfRun.IsItalic = copyrun.IsItalic;//是否设置斜体(字体倾斜)
xwpfRun.SetColor(copyrun.GetColor());//设置字体颜色--十六进制
xwpfRun.SetFontFamily(copyrun.FontFamily, FontCharRange.None); //设置标题样式如:(微软雅黑,隶书,楷体)根据自己的需求而定
xwpfRun.SetText(" • " + ActivityViewModel.ActivityName);//填充内容
}
}
}
}
foreach (var p in properties)
{
object value = p.GetValue(etity);
if (p.PropertyType.Name == "AccountViewModel" || p.PropertyType.Name == "CompanyViewModel")
{
if (value == null)
{
value = "";
}
object valuedata = null;
PropertyInfo[] properties2;
if (p.PropertyType.Name == "AccountViewModel")
{
if (!value.Equals(""))
valuedata = (AccountViewModel)value;
Type entity2Type = typeof(AccountViewModel);
properties2 = entity2Type.GetProperties();
}
else
{
if (!value.Equals(""))
valuedata = (CompanyViewModel)value;
Type entity2Type = typeof(CompanyViewModel);
properties2 = entity2Type.GetProperties();
}
foreach (PropertyInfo pi in properties2)
{
string propteryName2 = "$" + p.Name + "." + pi.Name + "$";//Word模板中设定的需要替换的标签
if (paratext.Contains(propteryName2))
{
if (value.Equals(""))
{
para.ReplaceText(propteryName2, "");
continue;
}
var value2 = pi.GetValue(valuedata);
if (value2 == null)
{
value2 = "";
}
if (pi.Name == "bankViewModels")
{
if (value2.Equals(""))
{
para.ReplaceText(propteryName2, "");
continue;
}
var banklist = (List<BankViewModel>)value2;
para.ReplaceText(propteryName2, "");
if (banklist.Any())
{
var copyrun = para.Runs[0];
foreach (var ActivityViewModel in banklist)
{
XWPFRun xwpfRun = para.CreateRun();//创建段落文本对象
xwpfRun.IsBold = copyrun.IsBold;//文字加粗
xwpfRun.FontSize = copyrun.FontSize;//设置文字大小
xwpfRun.IsItalic = copyrun.IsItalic;//是否设置斜体(字体倾斜)
xwpfRun.SetColor(copyrun.GetColor());//设置字体颜色--十六进制
xwpfRun.SetFontFamily(copyrun.FontFamily, FontCharRange.None); //设置标题样式如:(微软雅黑,隶书,楷体)根据自己的需求而定
xwpfRun.SetText(ActivityViewModel == null ? "" : ActivityViewModel.BankName == null ? "" : ActivityViewModel.BankName);//填充内容
xwpfRun.AddCarriageReturn();
XWPFRun xwpfRun2 = para.CreateRun();//创建段落文本对象
xwpfRun2.IsBold = copyrun.IsBold;//文字加粗
xwpfRun2.FontSize = copyrun.FontSize;//设置文字大小
xwpfRun2.IsItalic = copyrun.IsItalic;//是否设置斜体(字体倾斜)
xwpfRun2.SetColor(copyrun.GetColor());//设置字体颜色--十六进制
xwpfRun2.SetFontFamily(copyrun.FontFamily, FontCharRange.None); //设置标题样式如:(微软雅黑,隶书,楷体)根据自己的需求而定
xwpfRun2.SetText(ActivityViewModel == null ? "" : ActivityViewModel.BankAddress == null ? "" : ActivityViewModel.BankAddress);//填充内容
xwpfRun2.AddCarriageReturn();
XWPFRun xwpfRun3 = para.CreateRun();//创建段落文本对象
xwpfRun3.IsBold = copyrun.IsBold;//文字加粗
xwpfRun3.FontSize = copyrun.FontSize;//设置文字大小
xwpfRun3.IsItalic = copyrun.IsItalic;//是否设置斜体(字体倾斜)
xwpfRun3.SetColor(copyrun.GetColor());//设置字体颜色--十六进制
xwpfRun3.SetFontFamily(copyrun.FontFamily, FontCharRange.None); //设置标题样式如:(微软雅黑,隶书,楷体)根据自己的需求而定
xwpfRun3.SetText(ActivityViewModel == null ? "" : ActivityViewModel.BankNo == null ? "" : ActivityViewModel.BankNo);//填充内容
xwpfRun3.AddCarriageReturn();
}
}
}
else
{
//防止段落中出现多次字段
do
{
para.ReplaceText(propteryName2, value2.ToString());
paratext = para.ParagraphText;
} while (paratext.Contains(propteryName2));
}
}
}
}
else if (p.GetType() == typeof(List<PlaceOfPerformanceViewModel>))
{
string propteryName = "$" + p.Name + "$";//Word模板中设定的需要替换的标签
if (value == null)
{
value = "";
}
if (paratext.Contains(propteryName))
{
if (value.Equals(""))
{
para.ReplaceText(propteryName, "");
continue;
}
var plalist = (List<PlaceOfPerformanceViewModel>)value;
if (!plalist.Any())
{
para.ReplaceText(propteryName, "");
}
else
{
var copyrun = para.Runs[0];
foreach (var ActivityViewModel in plalist)
{
XWPFRun xwpfRun = para.CreateRun();//创建段落文本对象
xwpfRun.IsBold = copyrun.IsBold;//文字加粗
xwpfRun.FontSize = copyrun.FontSize;//设置文字大小
xwpfRun.IsItalic = copyrun.IsItalic;//是否设置斜体(字体倾斜)
xwpfRun.SetColor(copyrun.GetColor());//设置字体颜色--十六进制
xwpfRun.SetFontFamily(copyrun.FontFamily, FontCharRange.None); //设置标题样式如:(微软雅黑,隶书,楷体)根据自己的需求而定
xwpfRun.SetText(ActivityViewModel.new_address);//填充内容
xwpfRun.AddCarriageReturn();
}
}
}
}
else
{
string propteryName = "$" + p.Name + "$";//Word模板中设定的需要替换的标签
if (value == null)
{
value = "";
}
if (paratext.Contains(propteryName))
{
//防止段落中出现多次字段
do
{
para.ReplaceText(propteryName, value.ToString());
paratext = para.ParagraphText;
} while (paratext.Contains(propteryName));
}
}
}
}
/// <summary>
/// word模板内容替换
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="etity">实体数据</param>
/// <param name="para">段落</param>
private static void ReplaceKeyS(List<ActivityViewModel> list, XWPFTable table)
{
var newlist = list.GroupBy(c => c.ActivityType).ToList();
var isfirst = true;
var xuhao = 1;
var colorstyle = true;
foreach (var lists in newlist)
{
if (isfirst)
{
isfirst = false;
}
else
{
CT_Row nrtb = new CT_Row();
XWPFTableRow mrtb = new XWPFTableRow(nrtb, table);//创建行
table.AddRow(mrtb);//将行添加到table中
var c1tb = mrtb.CreateCell();//创建单元格
var cttb = c1tb.GetCTTc();
var cptb = cttb.AddNewTcPr();
cptb.gridSpan = new CT_DecimalNumber();
cptb.gridSpan.val = "4"; //合并列
cptb.AddNewVAlign().val = ST_VerticalJc.center;
cttb.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
c1tb.SetParagraph(SetTableParagraphInstanceSetting(table.Body.GetXWPFDocument(), table, lists.Key, ParagraphAlignment.CENTER, 24, true, 10));
//cttb.GetPList()[0].AddNewR().AddNewT().Value = lists.Key;
}
if (lists.Count() > 1)
{
colorstyle = false;
}
foreach (var l in lists)
{
CT_Row nritem = new CT_Row();
XWPFTableRow mritem = new XWPFTableRow(nritem, table);//创建行
table.AddRow(mritem);//将行添加到table中
XWPFTableCell c1item = mritem.CreateCell();//创建单元格
CT_Tc ctitem = c1item.GetCTTc();
CT_TcPr cpitem = ctitem.AddNewTcPr();
//if (colorstyle)
//{
// c1item.SetColor("33FF66");
//}
//第1行
// cp.AddNewVMerge().val = ST_Merge.restart;//合并行
cpitem.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ctitem.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.left;
//ctitem.GetPList()[0].AddNewR().AddNewT().Value = xuhao + " " + l.ActivityName;
c1item.SetParagraph(SetTableParagraphInstanceSetting(table.Body.GetXWPFDocument(), table, xuhao + " " + l.ActivityName, ParagraphAlignment.LEFT, 24, true, 10));
c1item = mritem.CreateCell();//创建单元格
ctitem = c1item.GetCTTc();
cpitem = ctitem.AddNewTcPr();
//if (colorstyle)
//{
// c1item.SetColor("33FF66");
//}
cpitem.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ctitem.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ctitem.GetPList()[0].AddNewR().AddNewT().Value = l.ResAndDeveFee.ToString();
c1item = mritem.CreateCell();//创建单元格
ctitem = c1item.GetCTTc();
cpitem = ctitem.AddNewTcPr();
//if (colorstyle)
//{
// c1item.SetColor("33FF66");
//}
cpitem.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ctitem.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ctitem.GetPList()[0].AddNewR().AddNewT().Value = l.OTimeMaterialCost.ToString();
c1item = mritem.CreateCell();//创建单元格
ctitem = c1item.GetCTTc();
cpitem = ctitem.AddNewTcPr();
//if (colorstyle)
//{
// c1item.SetColor("33FF66");
//}
cpitem.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ctitem.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ctitem.GetPList()[0].AddNewR().AddNewT().Value = l.FillerPurchaseCost.ToString();
xuhao++;
}
if (!colorstyle)
{
//临时总结
var nrT = new CT_Row();
var mrT = new XWPFTableRow(nrT, table);
table.AddRow(mrT);
XWPFTableCell cts = mrT.CreateCell();//创建单元格
CT_Tc ct1 = cts.GetCTTc();
CT_TcPr cp1 = ct1.AddNewTcPr();
cts.SetColor(_xiaojicolor);
//第1行
cp1.AddNewVMerge().val = ST_Merge.restart;//合并行
cp1.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct1.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.left;
cts.SetParagraph(SetTableParagraphInstanceSetting(table.Body.GetXWPFDocument(), table, lists.Key + "()", ParagraphAlignment.LEFT, 24, true, 10));
//ct1.GetPList()[0].AddNewR().AddNewT().Value = lists.Key + "(-x)";
//2
cts = mrT.CreateCell();//创建单元格
ct1 = cts.GetCTTc();
cp1 = ct1.AddNewTcPr();
cts.SetColor(_xiaojicolor);
cp1.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct1.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct1.GetPList()[0].AddNewR().AddNewT().Value = lists.Sum(c => c.ResAndDeveFee.GetValueOrDefault(0)).ToString();
//3
cts = mrT.CreateCell();//创建单元格
ct1 = cts.GetCTTc();
cp1 = ct1.AddNewTcPr();
cts.SetColor(_xiaojicolor);
cp1.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct1.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct1.GetPList()[0].AddNewR().AddNewT().Value = lists.Sum(c => c.OTimeMaterialCost.GetValueOrDefault(0)).ToString();
//4
cts = mrT.CreateCell();//创建单元格
ct1 = cts.GetCTTc();
cp1 = ct1.AddNewTcPr();
cts.SetColor(_xiaojicolor);
cp1.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct1.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct1.GetPList()[0].AddNewR().AddNewT().Value = lists.Sum(c => c.FillerPurchaseCost.GetValueOrDefault(0)).ToString();
//2行,多行合并类似
nrT = new CT_Row();
mrT = new XWPFTableRow(nrT, table);
table.AddRow(mrT);
cts = mrT.CreateCell();//创建单元格
ct1 = cts.GetCTTc();
cp1 = ct1.AddNewTcPr();
cp1.AddNewVMerge().val = ST_Merge.@continue;//合并行 序号
cts.SetColor(_xiaojicolor);
cts = mrT.CreateCell();//创建单元格
ct1 = cts.GetCTTc();
cp1 = ct1.AddNewTcPr();
cts.SetColor(_xiaojicolor);
cp1.gridSpan = new CT_DecimalNumber();
cp1.gridSpan.val = "2"; //合并列
cp1.AddNewVAlign().val = ST_VerticalJc.center;//
ct1.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
ct1.GetPList()[0].AddNewR().AddNewT().Value = (lists.Sum(c => c.ResAndDeveFee.GetValueOrDefault(0)) + lists.Sum(c => c.OTimeMaterialCost.GetValueOrDefault(0))).ToString();
//2-4
cts = mrT.CreateCell();//创建单元格
ct1 = cts.GetCTTc();
cp1 = ct1.AddNewTcPr();
cts.SetColor(_xiaojicolor);
cp1.AddNewVAlign().val = ST_VerticalJc.center;//
ct1.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct1.GetPList()[0].AddNewR().AddNewT().Value = lists.Sum(c => c.FillerPurchaseCost.GetValueOrDefault(0)).ToString();
}
}
#region 总计
CT_Row nr = new CT_Row();
XWPFTableRow mr = new XWPFTableRow(nr, table);//创建行
table.AddRow(mr);//将行添加到table中
XWPFTableCell c1 = mr.CreateCell();//创建单元格
CT_Tc ct = c1.GetCTTc();
CT_TcPr cp = ct.AddNewTcPr();
c1.SetColor(_zongjicolor);
//第1行
// cp.AddNewVMerge().val = ST_Merge.restart;//合并行
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = "小计(" + String.Join("+", list.Select(c => c.ActivityType).Distinct()) + ")";
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
c1.SetColor(_zongjicolor);
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = list.Sum(c => c.ResAndDeveFee.GetValueOrDefault(0)).ToString();
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
c1.SetColor(_zongjicolor);
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = list.Sum(c => c.OTimeMaterialCost.GetValueOrDefault(0)).ToString();
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
c1.SetColor(_zongjicolor);
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = list.Sum(c => c.FillerPurchaseCost.GetValueOrDefault(0)).ToString();
//第2行
nr = new CT_Row();
mr = new XWPFTableRow(nr, table);//创建行
table.AddRow(mr);//将行添加到table中
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
c1.SetColor(_zongjicolor);
// cp.AddNewVMerge().val = ST_Merge.restart;//合并行
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = "总计(可选项未计入)";
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
c1.SetColor(_zongjicolor);
cp.gridSpan = new CT_DecimalNumber();
cp.gridSpan.val = "2"; //合并列
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = (list.Sum(c => c.OTimeMaterialCost.GetValueOrDefault(0)) + list.Sum(c => c.ResAndDeveFee.GetValueOrDefault(0))).ToString();
c1 = mr.CreateCell();//创建单元格
ct = c1.GetCTTc();
cp = ct.AddNewTcPr();
c1.SetColor(_zongjicolor);
cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
ct.GetPList()[0].AddNewR().AddNewT().Value = list.Sum(c => c.FillerPurchaseCost.GetValueOrDefault(0)).ToString();
#endregion
}
/// <summary>
/// word模板内容替换为表格
/// </summary>
/// <param name="para"></param>
/// <param name="list"></param>
private static void ReplaceTable(List<ActivityViewModel> list, XWPFTable table)
{
var newlist = list.GroupBy(c => c.ActivityType).ToList();
var xuhao = 1;
var isFirst = true;
foreach (var lists in newlist)
{
var sublis = lists.Where(a => a.SubActivities != null && a.SubActivities.Count > 0).ToList();
if (sublis == null || sublis.Count <= 0)
continue;
if (isFirst)
{
isFirst = false;
}
else
{
CT_Row nrtbstar = new CT_Row();
XWPFTableRow mrtbstar = new XWPFTableRow(nrtbstar, table);//创建行
table.AddRow(mrtbstar);//将行添加到table中
var c1tbstar = mrtbstar.CreateCell();//创建单元格
var cttbstar = c1tbstar.GetCTTc();
var cptbstar = cttbstar.AddNewTcPr();
cptbstar.gridSpan = new CT_DecimalNumber();
cptbstar.gridSpan.val = "6"; //合并列
cptbstar.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttbstar.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
c1tbstar.SetBorderLeft(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
c1tbstar.SetBorderTop(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
c1tbstar.SetBorderBottom(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
c1tbstar.SetBorderRight(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
c1tbstar.SetParagraph(SetTableParagraphInstanceSetting(table.Body.GetXWPFDocument(), table, lists.Key + ":", ParagraphAlignment.CENTER, 24, true, 14));
nrtbstar = new CT_Row();
mrtbstar = new XWPFTableRow(nrtbstar, table);//创建行
table.AddRow(mrtbstar);//将行添加到table中
c1tbstar = mrtbstar.CreateCell();//创建单元格
cttbstar = c1tbstar.GetCTTc();
cptbstar = cttbstar.AddNewTcPr();
xuhao++;
cptbstar.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttbstar.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
c1tbstar.SetColor(_toubucolor);
c1tbstar.SetParagraph(SetTableParagraphInstanceSetting(table.Body.GetXWPFDocument(), table, "研究内容 " + xuhao, ParagraphAlignment.CENTER, 24, true, 10));
//cttbstar.GetPList()[0].AddNewR().AddNewT().Value = "研究内容 " + xuhao;
c1tbstar = mrtbstar.CreateCell();//创建单元格
cttbstar = c1tbstar.GetCTTc();
cptbstar = cttbstar.AddNewTcPr();
cptbstar.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttbstar.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
c1tbstar.SetColor(_toubucolor);
c1tbstar.SetParagraph(SetTableParagraphInstanceSetting(table.Body.GetXWPFDocument(), table, " ", ParagraphAlignment.CENTER, 24, true, 10));
//cttbstar.GetPList()[0].AddNewR().AddNewT().Value = " ";
c1tbstar = mrtbstar.CreateCell();//创建单元格
cttbstar = c1tbstar.GetCTTc();
cptbstar = cttbstar.AddNewTcPr();
cptbstar.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttbstar.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
c1tbstar.SetColor(_toubucolor);
c1tbstar.SetParagraph(SetTableParagraphInstanceSetting(table.Body.GetXWPFDocument(), table, "工作内容描述 ", ParagraphAlignment.CENTER, 24, true, 10));
//cttbstar.GetPList()[0].AddNewR().AddNewT().Value = "工作内容描述 ";
c1tbstar = mrtbstar.CreateCell();//创建单元格
cttbstar = c1tbstar.GetCTTc();
cptbstar = cttbstar.AddNewTcPr();
cptbstar.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttbstar.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
c1tbstar.SetColor(_toubucolor);
c1tbstar.SetParagraph(SetTableParagraphInstanceSetting(table.Body.GetXWPFDocument(), table, "阶段验收资料 ", ParagraphAlignment.CENTER, 24, true, 10));
//cttbstar.GetPList()[0].AddNewR().AddNewT().Value = "阶段验收资料 ";
c1tbstar = mrtbstar.CreateCell();//创建单元格
cttbstar = c1tbstar.GetCTTc();
cptbstar = cttbstar.AddNewTcPr();
cptbstar.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttbstar.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
c1tbstar.SetColor(_toubucolor);
c1tbstar.SetParagraph(SetTableParagraphInstanceSetting(table.Body.GetXWPFDocument(), table, "预计开发时间(月) ", ParagraphAlignment.CENTER, 24, true, 10));
//cttbstar.GetPList()[0].AddNewR().AddNewT().Value = "预计开发时间(月) ";
c1tbstar = mrtbstar.CreateCell();//创建单元格
cttbstar = c1tbstar.GetCTTc();
cptbstar = cttbstar.AddNewTcPr();
cptbstar.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttbstar.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
c1tbstar.SetColor(_toubucolor);
c1tbstar.SetParagraph(SetTableParagraphInstanceSetting(table.Body.GetXWPFDocument(), table, "合同金额(万元人民币 / 不含税) ", ParagraphAlignment.CENTER, 24, true, 10));
//cttbstar.GetPList()[0].AddNewR().AddNewT().Value = "合同金额(万元人民币 / 不含税) ";
}
foreach (var sub in lists)
{
if (sub.SubActivities == null || sub.SubActivities.Count == 0)
{
continue;
}
var count = 1;
var isSubFirst = true;
foreach (var subdetail in sub.SubActivities)
{
CT_Row nrtb = new CT_Row();
XWPFTableRow mrtb = new XWPFTableRow(nrtb, table);//创建行
table.AddRow(mrtb);//将行添加到table中
var c1tb = mrtb.CreateCell();//创建单元格
var cttb = c1tb.GetCTTc();
var cptb = cttb.AddNewTcPr();
if (isSubFirst)
{
isSubFirst = false;
cptb.AddNewVMerge().val = ST_Merge.restart;//合并行
cptb.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttb.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
cttb.GetPList()[0].AddNewR().AddNewT().Value = sub.ActivityName == null ? string.Empty : sub.ActivityName;
}
else
{
cptb.AddNewVMerge().val = ST_Merge.@continue;//合并行 序号
}
#region 绘制表格
c1tb = mrtb.CreateCell();//创建单元格
cttb = c1tb.GetCTTc();
cptb = cttb.AddNewTcPr();
//cptb.gridSpan = new CT_DecimalNumber();
//cptb.gridSpan.val = "6"; //合并列
cptb.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttb.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.left;
cttb.GetPList()[0].AddNewR().AddNewT().Value = count + ". " + (subdetail.SubActivityName == null ? string.Empty : subdetail.SubActivityName);
c1tb = mrtb.CreateCell();//创建单元格
cttb = c1tb.GetCTTc();
cptb = cttb.AddNewTcPr();
//cptb.gridSpan = new CT_DecimalNumber();
//cptb.gridSpan.val = "6"; //合并列
cptb.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttb.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.left;
cttb.GetPList()[0].AddNewR().AddNewT().Value = subdetail.SubActivityDes == null ? string.Empty : subdetail.SubActivityDes;
c1tb = mrtb.CreateCell();//创建单元格
cttb = c1tb.GetCTTc();
cptb = cttb.AddNewTcPr();
//cptb.gridSpan = new CT_DecimalNumber();
//cptb.gridSpan.val = "6"; //合并列
cptb.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttb.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
cttb.GetPList()[0].AddNewR().AddNewT().Value = subdetail.SubActivityData == null ? string.Empty : subdetail.SubActivityData;
c1tb = mrtb.CreateCell();//创建单元格
cttb = c1tb.GetCTTc();
cptb = cttb.AddNewTcPr();
//cptb.gridSpan = new CT_DecimalNumber();
//cptb.gridSpan.val = "6"; //合并列
cptb.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttb.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
cttb.GetPList()[0].AddNewR().AddNewT().Value = subdetail.SubActivityDevDate == null ? string.Empty : subdetail.SubActivityDevDate;
c1tb = mrtb.CreateCell();//创建单元格
cttb = c1tb.GetCTTc();
cptb = cttb.AddNewTcPr();
//cptb.gridSpan = new CT_DecimalNumber();
//cptb.gridSpan.val = "6"; //合并列
cptb.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttb.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
cttb.GetPList()[0].AddNewR().AddNewT().Value = subdetail.SubActivityResAndDeveFee.GetValueOrDefault(0).ToString();
#endregion
count++;
}
if (count > 2)
{
CT_Row nrtb = new CT_Row();
XWPFTableRow mrtb = new XWPFTableRow(nrtb, table);//创建行
table.AddRow(mrtb);//将行添加到table中
var c1tb = mrtb.CreateCell();//创建单元格
var cttb = c1tb.GetCTTc();
var cptb = cttb.AddNewTcPr();
cptb.AddNewVMerge().val = ST_Merge.@continue;//合并行 序号
c1tb = mrtb.CreateCell();//创建单元格
cttb = c1tb.GetCTTc();
cptb = cttb.AddNewTcPr();
cptb.gridSpan = new CT_DecimalNumber();
cptb.gridSpan.val = "4"; //合并列
c1tb.SetColor(_xiaojicolor);
cptb.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttb.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
cttb.GetPList()[0].AddNewR().AddNewT().Value = "小计";
c1tb = mrtb.CreateCell();//创建单元格
cttb = c1tb.GetCTTc();
cptb = cttb.AddNewTcPr();
c1tb.SetColor(_xiaojicolor);
cptb.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttb.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
if (sub != null && sub.SubActivities != null && sub.SubActivities.Count > 0)
{
cttb.GetPList()[0].AddNewR().AddNewT().Value = sub.SubActivities.Sum(c => c.SubActivityResAndDeveFee.GetValueOrDefault(0)).ToString();
}
else
{
cttb.GetPList()[0].AddNewR().AddNewT().Value = "0";
}
}
CT_Row nrtbend = new CT_Row();
XWPFTableRow mrtbend = new XWPFTableRow(nrtbend, table);//创建行
table.AddRow(mrtbend);//将行添加到table中
var c1tbend = mrtbend.CreateCell();//创建单元格
var cttbend = c1tbend.GetCTTc();
var cptbend = cttbend.AddNewTcPr();
cptbend.gridSpan = new CT_DecimalNumber();
cptbend.gridSpan.val = "6"; //合并列
cptbend.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttbend.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
c1tbend.SetBorderLeft(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
c1tbend.SetBorderRight(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
c1tbend.SetBorderTop(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
c1tbend.SetBorderBottom(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
}
CT_Row nrtbeend = new CT_Row();
XWPFTableRow mrtbeend = new XWPFTableRow(nrtbeend, table);//创建行
table.AddRow(mrtbeend);//将行添加到table中
var c1tbeend = mrtbeend.CreateCell();//创建单元格
var cttbeend = c1tbeend.GetCTTc();
var cptbeend = cttbeend.AddNewTcPr();
cptbeend.gridSpan = new CT_DecimalNumber();
cptbeend.gridSpan.val = "6"; //合并列
cptbeend.AddNewVAlign().val = ST_VerticalJc.center;//垂直
cttbeend.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
c1tbeend.SetBorderLeft(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
c1tbeend.SetBorderRight(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
c1tbeend.SetBorderTop(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
c1tbeend.SetBorderBottom(XWPFTable.XWPFBorderType.NIL, 0, 0, "");
}
}
NPOIHellper public XWPFParagraph ParagraphInsertImg(XWPFDocument document) { XWPFParagraph paragraph = document.CreateParagraph();//创建段落对象 paragraph.Alignment = ParagraphAlignment.CENTER;
XWPFRun xwpfRun = paragraph.CreateRun();//创建段落文本对象
//标题图片
FileStream gfs = new FileStream(@"D:\MyCode\Words\Files\1.png", FileMode.Open, FileAccess.Read);
xwpfRun.AddPicture(gfs, (int)PictureType.PNG, "1.png", (int)(330 * 9525), (int)(100 * 9525));
gfs.Close();
return paragraph;
}
/// <summary>
/// 创建word文档中的段落对象和设置段落文本的基本样式(字体大小,字体,字体颜色,字体对齐位置)
/// </summary>
/// <param name="document">document文档对象</param>
/// <param name="fillContent">段落第一个文本对象填充的内容</param>
/// <param name="isBold">是否加粗</param>
/// <param name="fontSize">字体大小</param>
/// <param name="fontFamily">字体</param>
/// <param name="paragraphAlign">段落排列(左对齐,居中,右对齐)</param>
/// <param name="isStatement">是否在同一段落创建第二个文本对象(解决同一段落里面需要填充两个或者多个文本值的情况,多个文本需要自己拓展,现在最多支持两个)</param>
/// <param name="secondFillContent">第二次声明的文本对象填充的内容,样式与第一次的一致</param>
/// <param name="fontColor">字体颜色--十六进制</param>
/// <param name="isItalic">是否设置斜体(字体倾斜)</param>
/// <returns></returns>
public XWPFParagraph ParagraphInstanceSetting(XWPFDocument document, string fillContent, bool isBold, double fontSize, string fontFamily, ParagraphAlignment paragraphAlign, bool isStatement = false, string secondFillContent = "", string fontColor = "000000", bool isItalic = false, bool isXiahuaxian = false)
{
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); //设置标题样式如:(微软雅黑,隶书,楷体)根据自己的需求而定
if (isXiahuaxian)
xwpfRun.SetUnderline(UnderlinePatterns.Thick);//设置下划线,枚举类型
if (!isStatement) return paragraph;
XWPFRun secondXwpfRun = paragraph.CreateRun();//创建段落文本对象
secondXwpfRun.IsBold = !isBold;//文字加粗
secondXwpfRun.SetText(secondFillContent);//填充内容
secondXwpfRun.FontSize = fontSize;//设置文字大小
secondXwpfRun.IsItalic = isItalic;//是否设置斜体(字体倾斜)
secondXwpfRun.SetColor(fontColor);//设置字体颜色--十六进制
secondXwpfRun.SetFontFamily(fontFamily, FontCharRange.None); //设置标题样式如:(微软雅黑,隶书,楷体)根据自己的需求而定
if (isXiahuaxian)
secondXwpfRun.SetUnderline(UnderlinePatterns.Thick);//设置下划线,枚举类型
return paragraph;
}
/// <summary>
/// 创建Word文档中表格段落实例和设置表格段落文本的基本样式(字体大小,字体,字体颜色,字体对齐位置)
/// </summary>
/// <param name="document">document文档对象</param>
/// <param name="table">表格对象</param>
/// <param name="fillContent">要填充的文字</param>
/// <param name="paragraphAlign">段落排列(左对齐,居中,右对齐)</param>
/// <param name="textPosition">设置文本位置(设置两行之间的行间,从而实现表格文字垂直居中的效果),从而实现table的高度设置效果 </param>
/// <param name="isBold">是否加粗(true加粗,false不加粗)</param>
/// <param name="fontSize">字体大小</param>
/// <param name="fontColor">字体颜色--十六进制</param>
/// <param name="isItalic">是否设置斜体(字体倾斜)</param>
/// <returns></returns>
public XWPFParagraph SetTableParagraphInstanceSetting(XWPFDocument document, XWPFTable table, string fillContent, ParagraphAlignment paragraphAlign, int textPosition = 24, bool isBold = false, double fontSize = 10, string fontColor = "000000", bool isItalic = false)
{
var para = new CT_P();
//设置单元格文本对齐
para.AddNewPPr().AddNewTextAlignment();
XWPFParagraph paragraph = new XWPFParagraph(para, table.Body);//创建表格中的段落对象
paragraph.Alignment = paragraphAlign;//文字显示位置,段落排列(左对齐,居中,右对齐)
//paragraph.FontAlignment =Convert.ToInt32(ParagraphAlignment.CENTER);//字体在单元格内显示位置与 paragraph.Alignment效果相似
XWPFRun xwpfRun = paragraph.CreateRun();//创建段落文本对象
xwpfRun.SetText(fillContent);
xwpfRun.FontSize = fontSize;//字体大小
xwpfRun.SetColor(fontColor);//设置字体颜色--十六进制
xwpfRun.IsItalic = isItalic;//是否设置斜体(字体倾斜)
xwpfRun.IsBold = isBold;//是否加粗
xwpfRun.SetFontFamily("宋体", FontCharRange.None);//设置字体(如:微软雅黑,华文楷体,宋体)
return paragraph;
}