环境:net framework 4.5.2

public class WordTool {/// <summary>/// 生成会议记录/// </summary>/// <param name="date">记录日期时间</param>/// <param name="markUser">记录人员</param>/// <param name="address">地点</param>/// <param name="title">议题</param>/// <param name="customer">客户人员</param>/// <param name="dw">均维人员</param>/// <param name="contentArray">会议记录</param>public static string Init(string date, string markUser, string address, string title, string customer, string dw, string[] contentArray) {//路径验证var currentName = $"File/PreViewWord/{DateTime.Now.ToString("yyyyMMdd-HHssmm")}.docx";DirectoryInfo dir = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "File/PreViewWord");if (!dir.Exists) dir.Create();var relativeName = AppDomain.CurrentDomain.BaseDirectory + currentName;FileInfo file = new FileInfo(relativeName);if (file.Exists) file.Delete();using (FileStream fs = new FileStream(relativeName, FileMode.OpenOrCreate)) {#region 初始化//1、初始化文档XWPFDocument m_Doc = new XWPFDocument();CT_SectPr m_SectPrs = new CT_SectPr(); //设置页面格式(宽度) A4横向m_SectPrs.pgSz.w = (ulong)11906;m_SectPrs.pgSz.h = (ulong)16838;//创建页眉CT_Hdr m_Hdr = new CT_Hdr();m_Hdr.AddNewP().AddNewPPr().AddNewSpacing().lineRule = ST_LineSpacingRule.auto;//页眉内容m_Hdr.AddNewP().AddNewR().AddNewT().Value = "东莞均维";XWPFRelation Hrelation = XWPFRelation.HEADER;XWPFHeader m_h = (XWPFHeader)m_Doc.CreateRelationship(Hrelation, XWPFFactory.GetInstance(),m_Doc.HeaderList.Count + 1);m_h.SetHeaderFooter(m_Hdr);CT_HdrFtrRef m_HdrFtr = m_SectPrs.AddNewHeaderReference();m_HdrFtr.type = ST_HdrFtr.@default;m_HdrFtr.id = m_h.GetPackageRelationship().Id;XWPFParagraph pHeader = m_h.Paragraphs[1];pHeader.Alignment = ParagraphAlignment.CENTER; //居中pHeader.Runs[0].FontSize = 7;//创建页脚CT_Ftr m_ftr = new CT_Ftr();m_ftr.AddNewP().AddNewR().AddNewT().Value = (m_Doc.FooterList.Count + 1) + "";//创建页脚关系(footern.xml)XWPFRelation Frelation = XWPFRelation.FOOTER;XWPFFooter m_f = (XWPFFooter)m_Doc.CreateRelationship(Frelation, XWPFFactory.GetInstance(), m_Doc.FooterList.Count + 1);//设置页脚m_f.SetHeaderFooter(m_ftr);CT_HdrFtrRef m_HdrFtr1 = m_SectPrs.AddNewFooterReference();m_HdrFtr1.type = ST_HdrFtr.@default;m_HdrFtr1.id = m_f.GetPackageRelationship().Id;XWPFParagraph pFooter = m_f.Paragraphs[0];pFooter.Alignment = ParagraphAlignment.CENTER; //居中pFooter.Runs[0].FontSize = 7;m_Doc.Document.body.sectPr = m_SectPrs;#endregion#region 标题段落//2、创建主标题段落XWPFParagraph p1 = m_Doc.CreateParagraph();p1.Alignment = ParagraphAlignment.LEFT;XWPFRun row1 = p1.CreateRun();row1.FontFamily = "黑体";row1.FontSize = 22;row1.IsBold = true;//主标题row1.SetText("MEETING MINUTES");CT_P doc_p1 = m_Doc.Document.body.GetPArray(0);//段落水平居中 标题doc_p1.AddNewPPr().AddNewJc().val = ST_Jc.center;#endregion//空格XWPFParagraph space1 = m_Doc.CreateParagraph();space1.Alignment = ParagraphAlignment.CENTER;XWPFRun spaceRow1 = space1.CreateRun();#region 纪要详情//创建表格牵扯到合并表格所以这里一行行创建XWPFTable table = m_Doc.CreateTable(1, 3);//1⾏3列table.RemoveRow(0);//去掉第⼀⾏空⽩的table.Width = 1000 * 5;table.SetColumnWidth(0, 600);/* 设置列宽 */table.SetColumnWidth(1, 600);/* 设置列宽 */table.SetColumnWidth(2, 600);/* 设置列宽 *///table.SetColumnWidth(1, 1200);#region 表格第一行CT_Row nr = new CT_Row();XWPFTableRow mr = new XWPFTableRow(nr, table);//创建⾏//设置行高mr.GetCTRow().AddNewTrPr().AddNewTrHeight().val = (ulong)426;table.AddRow(mr);//将⾏添加到table中XWPFTableCell c1 = mr.CreateCell();//创建单元格CT_Tc ct = c1.GetCTTc();CT_TcPr cp = ct.AddNewTcPr();cp.AddNewVMerge().val = ST_Merge.restart;//合并⾏cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.left;//ct.GetPList()[0].AddNewR().AddNewT().Value = "日期:2022-05-26";ct.RemoveP(0);XWPFParagraph par = c1.AddParagraph();//首行缩进//par.IndentationFirstLine = Indentation("宋体", 8, 2, FontStyle.Regular);XWPFRun run = par.CreateRun();run.FontFamily = "宋体";run.IsBold = true;run.FontSize = 8;run.SetText(" 日期:" + date);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.left;//ct.GetPList()[0].AddNewR().AddNewT().Value = "记录人:梁非凡";//移除标题ct.RemoveP(0);par = c1.AddParagraph();run = par.CreateRun();run.FontFamily = "宋体";run.FontSize = 8;run.IsBold = true;run.SetText(" 记录人:" + markUser);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.left;//ct.GetPList()[0].AddNewR().AddNewT().Value = "地点:均维";//移除标题ct.RemoveP(0);par = c1.AddParagraph();run = par.CreateRun();run.FontFamily = "宋体";run.IsBold = true;run.FontSize = 8;run.SetText(" 地点:" + address);#endregion#region 表格第二行// 2行nr = new CT_Row();mr = new XWPFTableRow(nr, table);mr.GetCTRow().AddNewTrPr().AddNewTrHeight().val = (ulong)426;table.AddRow(mr);c1 = mr.CreateCell();//创建单元格ct = c1.GetCTTc();cp = ct.AddNewTcPr();cp.gridSpan = new CT_DecimalNumber();cp.gridSpan.val = "3"; //合并 3列cp.AddNewVMerge().val = ST_Merge.restart;//合并⾏ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.left;//文字左对齐cp.AddNewVAlign().val = ST_VerticalJc.center;//文字垂直//移除标题ct.RemoveP(0);//使用中转方法par = c1.AddParagraph();//首行缩进//par.IndentationFirstLine = Indentation("宋体", 8, 2, FontStyle.Regular);run = par.CreateRun();run.FontFamily = "黑体";run.IsBold = true;run.FontSize = 9;run.SetText(" 标题:" + title);//run.AddBreak();#endregion#region 表格第三行// 3⾏,多⾏合并类似nr = new CT_Row();mr = new XWPFTableRow(nr, table);mr.GetCTRow().AddNewTrPr().AddNewTrHeight().val = (ulong)800;table.AddRow(mr);c1 = mr.CreateCell();//创建单元格ct = c1.GetCTTc();cp = ct.AddNewTcPr();cp.gridSpan = new CT_DecimalNumber();cp.gridSpan.val = "3"; //合并 3列ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.left;cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直ct.RemoveP(0);//这里标题就不设置了//ct.GetPList()[0].AddNewR().AddNewT().Value = @"议题:";//标题par = c1.AddParagraph();//首行缩进par.IndentationFirstLine = Indentation("黑体", 8, 2, FontStyle.Regular);run = par.CreateRun();run.FontFamily = "黑体";run.IsBold = true;run.FontSize = 8;run.SetText("与会人员:");//run.AddBreak();//run.AddCarriageReturn(); //换行会多出一行配合addbreak()使用par = c1.AddParagraph();//首行缩进par.IndentationFirstLine = Indentation("宋体", 8, 2, FontStyle.Regular);run = par.CreateRun();run.FontFamily = "宋体";run.IsBold = false;run.FontSize = 8;run.SetText("客户:" + customer);//run.AddBreak();//run.AddCarriageReturn();par = c1.AddParagraph();//首行缩进par.IndentationFirstLine = Indentation("宋体", 8, 2, FontStyle.Regular);run = par.CreateRun();run.FontFamily = "宋体";run.IsBold = false;run.FontSize = 8;run.SetText("均维:" + dw);#endregion#endregion//创建空行space1 = m_Doc.CreateParagraph();space1.Alignment = ParagraphAlignment.CENTER;spaceRow1 = space1.CreateRun();//创建空行space1 = m_Doc.CreateParagraph();space1.Alignment = ParagraphAlignment.CENTER;spaceRow1 = space1.CreateRun();#region 会议纪要//创建表格table = m_Doc.CreateTable(1, 1);//1⾏3列table.RemoveRow(0);//去掉第⼀⾏空⽩的table.Width = 1000 * 5;table.SetColumnWidth(0, 1800);/* 设置列宽 */#region 标题nr = new CT_Row();mr = new XWPFTableRow(nr, table);//创建⾏mr.GetCTRow().AddNewTrPr().AddNewTrHeight().val = (ulong)426;table.AddRow(mr);//将⾏添加到table中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.left;ct.RemoveP(0);mr.GetCell(0).SetColor("#EEEEEE");par = mr.GetCell(0).AddParagraph();run = par.CreateRun();run.FontFamily = "宋体";run.FontSize = 8;run.IsBold = true;run.SetText("会议记录");#endregion#region 内容nr = new CT_Row();mr = new XWPFTableRow(nr, table);//创建⾏table.AddRow(mr);//将⾏添加到table中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.left;ct.RemoveP(0);foreach (var item in contentArray) {par = mr.GetCell(0).AddParagraph();par.IndentationFirstLine = Indentation("宋体", 7, 2, FontStyle.Regular);par.SpacingBeforeLines = 20;par.SpacingBeforeLines = 20;par.FirstLineIndent = 20;run = par.CreateRun();run.FontFamily = "宋体";run.FontSize = 7;run.IsBold = true;run.SetText(item);run.AddBreak();//run.AddCarriageReturn();}#endregion#endregion//5、写入到文件m_Doc.Write(fs);}return currentName;}//设置字体样式public XWPFParagraph SetCellText(XWPFDocument doc, XWPFTable table, string setText) {//table中的⽂字格式设置CT_P para = new CT_P();XWPFParagraph pCell = new XWPFParagraph(para, table.Body);pCell.Alignment = ParagraphAlignment.CENTER;//字体居中pCell.VerticalAlignment = TextAlignment.CENTER;//字体居中XWPFRun r1c1 = pCell.CreateRun();r1c1.SetText(setText);r1c1.FontSize = 12;r1c1.FontFamily = "华⽂楷体";//r1c1.SetTextPosition(20);//设置⾼度return pCell;}protected static int Indentation(String fontname, int fontsize, int Indentationfonts, FontStyle fs) {//字显示宽度,用于段首行缩进//字号与fontsize关系//初号(0号)=84,小初=72,1号=52,2号=44,小2=36,3号=32,小3=30,4号=28,//小4=24,5号=21,小5=18,6号=15,小6=13,7号=11,8号=10Bitmap bmp = new Bitmap(1000, 800);Graphics m_tmpGr = Graphics.FromImage(bmp);m_tmpGr.PageUnit = GraphicsUnit.Point;SizeF size = m_tmpGr.MeasureString("好", new Font(fontname, fontsize * 0.75F, fs));return (int)size.Width * Indentationfonts * 10;}}
