NPIO 利用模板生成word文件
我们有时候会遇到一些用代码生成word文件的功能需求,接上一篇“Npoi XWPF Word 导出时插入图片无法显示 bug 完美解决” ,这次利用Npoi和word 模板生成word文件。
一、第一步:
根据需要要将模板设计好,需要填充的部分用$或者别的符合,如下图:
二、第二步
代码实现,在这个模板中,我通调试发现,整个模板只有一个段落如 var para = doc.Paragraphs[0],多个段落稍加改动即可。替换的内容我时存储keywords 字典中,list 应该也是可以的。
public static void CreatLabe4_1(string templatePath, string savePath, LableInfo lableInfo) { try { if (File.Exists(savePath)) { File.Delete(savePath); } FileStream fs = new FileStream(templatePath, FileMode.Open, FileAccess.Read); XWPFDocument doc = new XWPFDocument(fs); Dictionary<string, string> keywords = new Dictionary<string, string>(); keywords.Add("ProductName", lableInfo.ProductName); keywords.Add("Station", lableInfo.Station); keywords.Add("ContractNo", lableInfo.ContractNo); keywords.Add("BoxNo", lableInfo.BoxNo); keywords.Add("Count", lableInfo.Count.ToString()); keywords.Add("Size", lableInfo.Size); keywords.Add("Weight", lableInfo.Weight.ToString()); keywords.Add("ModelNumber", lableInfo.ModelNumber); keywords.Add("ProjcetNo", lableInfo.ProjcetNo); keywords.Add("ProjectName", lableInfo.ProjectName); keywords.Add("WorkNnmber", lableInfo.WorkNnmber); keywords.Add("BatchNumber", lableInfo.BatchNumber); keywords.Add("ParNumber", lableInfo.ParNumber); var para = doc.Paragraphs[0]; foreach (var item in keywords) { string oldtext = para.ParagraphText; if (oldtext == "") continue; string temptext = para.ParagraphText; if (temptext.Contains("{$" + item.Key + "}")) { oldtext = "{$" + item.Key + "}"; temptext=item.Value; para.ReplaceText(oldtext, temptext); } } FileStream output = new FileStream(savePath, FileMode.Create); doc.Write(output); output.Close(); output.Dispose(); } catch (Exception ex) { } }
完成效果如下: