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)
            {


            }

        }

完成效果如下:

 

 

 

 

        

 

posted @ 2021-02-05 13:34  眯眼看世界  阅读(504)  评论(0编辑  收藏  举报